繁体   English   中英

带有平面列表的多选项目

[英]Multi-select items with flatlist

我正在尝试使用多选来实现一个平面列表,但是当我按下一个项目时,它会更改所有项目的背景,我该如何解决?

state = {
        authUsers: [],
        selMembers: [],
        selected: false
    }

 render() {
    const renderUser = (item) => (
        <TouchableOpacity style={[styles.item, { backgroundColor: this.state.selected ? '#DDD' : '#FFF' }]} onPress={() => this.selectItem(item.key)}>
            <Avatar rounded size="medium" source={{ uri: item.avatar }} />
            <View>
                <Text style={styles.memberName}>{item.name}</Text>
            </View>
        </TouchableOpacity>
    )
    return (
        <View style={{ marginTop: StatusBar.currentHeight }}>
            <FlatList
                style={{ padding: 6 }}
                data={this.state.authUsers}
                keyExtractor={(item) => item.id}
                renderItem={({ item }) => renderUser(item)}
            />
        </View>
    )
  }
state = {
    authUsers: [{
        key: 1,
        item_name: 'AAA',
    },
    {
        key: 2,
        item_name: 'BBB',
    },
    {
        key: 3,
        item_name: 'CCC',
    },
    {
        key: 4,
        item_name: 'DDD',
    },]
}

selectItem(key) {
    let authUsers = [...this.state.authUsers]
    for (let item of authUsers) {
        if (item.key == key) {
            item.isSelected = (item.isSelected == null) ? true : !item.isSelected;
            break;
        }
    }
    this.setState({ authUsers });
}

render() {
    const renderUser = (item) => (
        <TouchableOpacity style={[styles.item, { backgroundColor: item.isSelected ? '#DDD' : '#FFF' }]} onPress={() => this.selectItem(item.key)}>
            <Avatar rounded size="medium" source={{ uri: item.avatar }} />
            <View>
                <Text style={styles.memberName}>{item.name}</Text>
            </View>
        </TouchableOpacity>
    )
    return (
        <View style={{ marginTop: StatusBar.currentHeight }}>
            <FlatList
                style={{ padding: 6 }}
                data={this.state.authUsers}
                keyExtractor={(item) => item.id}
                renderItem={({ item }) => renderUser(item)}
            />
        </View>
    )
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM