Flatlist
にクリックリスナーを追加するにはどうすればよいですか?
私のコード:
renderItem({item, index}){
return <View style = {{
flex:1,
margin: 5,
minWidth: 170,
maxWidth: 223,
height: 304,
maxHeight: 304,
backgroundColor: '#ccc',
}}/>
}
render(){
return(<FlatList
contentContainerStyle={styles.list}
data={[{key: 'a'}, {key: 'b'},{key:'c'}]}
renderItem={this.renderItem}
/>);
}
}
更新1:ボタンを使用しましたが、Flatlist
で機能しません。ただし、Flatlist
の代わりにボタンのみを使用すると、機能します。 Flatlist
renderItemで動作しないのはなぜですか?
_listener = () => {
alert("clicked");
}
renderItem({item, index}){
return<View>
<Button
title = "Button"
color = "#ccc"
onPress={this._listener}
/>
</View>
}
<TouchableWithoutFeedback>
タグ内に(renderItemメソッド内で)行要素をラップする必要があります。 TouchableWithoutFeedback
は、onPressイベントを提供できる小道具であるonPressを取ります。
TouchableWithoutFeedback
については、これを参照してください link
TouchableWithoutFeedback
を使用しました。そのためには、すべてのrenderItem要素(つまり、行)をTouchableWithoutFeedback
に追加する必要があります。次に、onPress
イベントを追加し、FaltListアイテムをonPressイベントに渡します。
import {View, FlatList, Text, TouchableWithoutFeedback} from 'react-native';
render() {
return (
<FlatList style={styles.list}
data={this.state.data}
renderItem={({item}) => (
<TouchableWithoutFeedback onPress={ () => this.actionOnRow(item)}>
<View>
<Text>ID: {item.id}</Text>
<Text>Title: {item.title}</Text>
</View>
</TouchableWithoutFeedback>
)}
/>
);
}
actionOnRow(item) {
console.log('Selected Item :',item);
}
TouchableOpacity
を使用しました。うまく機能しています。これにより、クリックのフィードバックが得られます。 TouchableWithoutFeedback
では提供されません。私は次のことをしました:
import { View, Text, TouchableOpacity } from "react-native";
。 。 。
_onPress = () => {
// your code on item press
};
render() {
<TouchableOpacity onPress={this._onPress}>
<View>
<Text>List item text</Text>
</View>
</TouchableOpacity>
}