2016-12-01 73 views
0

我正在研究react-native GridView组件,我想要更改GridView项目单击的可见性状态。如何在反应原生GridView组件中更改可见性状态?

所以我有一个列表颜色网格,但是当我点击单个项目时,它应该选择并显示一个刻度标记。

export default class filter extends Component { 
    constructor() { 
    super(); 
     this.state = { 
      gridDataSourceColor: filterColor, 
      isVisible: false, 
    }; 
    } 
render() { 
    return (
     <View> 
      <GridView 
       items={this.state.gridDataSourceColor} 
       itemsPerRow={6} 
       renderItem={this.renderColorItem.bind(this)} 
      /> 
     </View> 
    ); 
} 

onItemPressed(item){ 

} 

renderColorItem(item){ 
    return(
    <TouchableHighlight key={item.id} onPress={this.onItemPressed.bind(this, item)}> 
     <View 
      key={item.id} 
      style={{ 
       width: 50, 
       height: 45, 
       marginLeft: 2, 
       marginRight: 2, 
       justifyContent: 'center', 
       alignItems: 'center', 
       marginTop: 5, 
       backgroundColor: item.color}}> 

       <Image 
        style={{ 
         width: 25, 
         height:25}} 
        source={require('../images/check_mark_icon.png')} /> 
     </View> 
    </TouchableHighlight> 
); 
} 
} 
:在选择

enter image description here

代码

网格项目

enter image description here

电网项目

所以上面的代码,当我做onItemPressed()时,它应该改变状态并显示刻度标记。

请通过我的帖子,并建议我一些解决方案。

回答

2

isSelectedfilterColor的产品。

onItemPressed(item){ 
var tempFilterColor = this.state.gridDataSourceColor; 
    for (var i=0; i< tempFilterColor.length; i++) 
    { 
     if (tempFilterColor[i].id == item.id) { 
     tempFilterColor[i].isSelected = true; 
     break; //Stop this loop, we found it! 
    } 
    } 
    this.setState({ gridDataSourceColor : tempFilterColor}); 
} 

renderColorItem(item){ 
    return(
    <TouchableHighlight key={item.id} onPress={this.onItemPressed.bind(this, item)}> 
     <View 
      key={item.id} 
      style={{ 
       width: 50, 
       height: 45, 
       marginLeft: 2, 
       marginRight: 2, 
       justifyContent: 'center', 
       alignItems: 'center', 
       marginTop: 5, 
       backgroundColor: item.color}}> 

       {this.renderCheckMark(item)} 
     </View> 
    </TouchableHighlight> 
); 
} 

renderCheckMark(item) 
{ 
    if(item.isSelected) { // image render only if item selected 
     return(
     <Image 
        style={{ 
         width: 25, 
         height:25}} 
        source={require('../images/check_mark_icon.png')} /> 
     ); 
    } 
} 
+0

嘿感谢,这是一个很大的帮助...... –

+0

哎我设置isSelected =真喜欢这个变种tempFilterColor = this.state.gridDataSourceColor; this.setState({gridDataSourceColor:[{isSelected:true}]}); –

+0

嘿我这样做,但它没有设置值var tempFilterColor = this.state = { gridDataSourceColor:[{id:item.id,isSelected:true}], }; this.setState({gridDataSourceColor:tempFilterColor}); var tempFilterColor = item.isSelected; –

相关问题