更改 FlatList 的唯一 onPressed 项的样式
Posted
技术标签:
【中文标题】更改 FlatList 的唯一 onPressed 项的样式【英文标题】:Change the style of only onPressed item of FlatList 【发布时间】:2019-05-06 02:29:21 【问题描述】:我一直在尝试更改 Flatlist 的 selected(onPress) 项目的颜色,但它正在更改整个列表的颜色。我添加了以下代码:
class SelectionForm extends Component
constructor(props)
super(props);
this.state =
textColor: '#333'
;
typeSelected(value)
Alert.alert(value);
this.setState(
textColor: 'green'
);
render()
return (
<View>
<FlatList
data=[
utId: '1', utName: 'Guest' ,
utId: '2', utName: 'Faculty' ,
utId: '3', utName: 'Student'
]
renderItem=
( item ) =>
<Text
style=[
styles.userListText,
backgroundColor: this.state.bgColor,
color: this.state.textColor
]
onPress=() => this.typeSelected(item.utId)
>
item.utName
</Text>
keyExtractor=(item, index) => index.toString()
/>
</View>
);
const styles = StyleSheet.create(
userListText:
fontSize: 14,
color: '#333',
paddingTop: 10,
paddingBottom: 10,
borderBottomWidth: 1,
borderColor: '#eee'
);
export default SelectionForm;
我正在使用 Text 来显示列表。 onPress 列表中的文本,我正在获取单击项的值,但所有列表项的样式都在变化。
【问题讨论】:
【参考方案1】:您应该使您的代码依赖于您要更改颜色的项目的id
。
你的状态应该有一个标识符来跟踪当前按下的项目,比如itemPressed
,它应该用一个任意值初始化,比如-1
,这样它就不会表示列表中的任何项目。
所以你的typeSelected
应该是这样的:
typeSelected(value)
Alert.alert(value);
this.setState(
itemPressed: value
);
您的 Text
组件应该如下所示:
<Text
style=[
styles.userListText,
backgroundColor: this.state.bgColor,
color: this.state.itemPressed === item.utId ? 'green' : 'black'
]
onPress=() => this.typeSelected(item.utId)
>
【讨论】:
以上是关于更改 FlatList 的唯一 onPressed 项的样式的主要内容,如果未能解决你的问题,请参考以下文章
OnPress 后背景颜色变为黑色,当显示在 FlatList 顶部时
需要按 flatlist child 2/3 秒才能实际移动到链接
如何使用 ref 在 React Native Video 中编辑视频播放器道具