簡體   English   中英

反應原生 Flatlist 網格和項目標題

[英]React native Flatlist grid and item header

我想自定義一個相同的屏幕: 在此處輸入圖片說明

所以我使用 Flastlist 並檢查項目是否是標題我將設置為 item = window.with 如果不是 width item = window.width/3。 但它的錯誤。 這是我的代碼:

 const { width, height } = Dimensions.get("window") class App extends React.Component { constructor() { super() this.state = { data: [ { name: "Movies", header: true }, { name: "Interstellar", header: false }, { name: "Dark Knight", header: false }, { name: "Pop", header: false }, { name: "Music", header: true }, { name: "Adams", header: false }, { name: "Nirvana", header: false }, { name: "Amrit Maan", header: false }, { name: "Oye Hoye", header: false }, { name: "Eminem", header: false }, { name: "Places", header: true }, { name: "Jordan", header: false }, { name: "Punjab", header: false }, { name: "Ludhiana", header: false }, { name: "Jamshedpur", header: false }, { name: "India", header: false }, { name: "People", header: true }, { name: "Jazzy", header: false }, { name: "Appie", header: false }, { name: "Baby", header: false }, { name: "Sunil", header: false }, { name: "Arrow", header: false }, { name: "Things", header: true }, { name: "table", header: false }, { name: "chair", header: false }, { name: "fan", header: false }, { name: "cup", header: false }, { name: "cube", header: false } ], stickyHeaderIndices: [] }; } renderItem(item) { if (item.header) { return ( <View style={{ width: width, height: 40, backgroundColor: 'green' }}> <Text>{item.name}</Text> </View> ) } else { return ( <View style={{ width: width / 3, height: width / 3, backgroundColor: 'white', borderWidth: 1, borderColor: 'gray' }}> <Text>{item.name}</Text> </View> ) } } render() { return ( <View style={{ flex: 1, backgroundColor: 'red' }}> <FlatList data={this.state.data} renderItem={({ item }) => ( this.renderItem(item) )} keyExtractor={item => item.name} /> </View> ); } } export default App;

和我的結果在此處輸入圖片說明 我有錯誤:一個項目不是標題是一行,但我想連續顯示 3 個項目。

當使用代碼在 flastlist 中添加數字列 = 3 時:

 <FlatList numColumns={3} data={this.state.data} renderItem={({ item }) => (this.renderItem(item))} keyExtractor={item => item.name} />
我有結果 在此處輸入圖片說明

如何修復連續顯示 3 個項目? 非常感謝。

我想你忘了在 Flatlist 道具中添加numColumns = { 3 } 在這里,您可以獲得問題的詳細解決方案。

在主container使用flexWrap: 'wrap'flexDirection: 'row'應該可以解決您的問題。

<View style={{ flex: 1, backgroundColor: 'red', flexWrap: 'wrap', flexDirection: 'row' }}>
  <FlatList
    data={this.state.data}
    renderItem={({ item }) => (
      this.renderItem(item)
    )}
    keyExtractor={item => item.name}
  />
</View>

我使用嵌套的 FlatList來解決這個問題:

const renderCategory = category => (
    <View>
      <Text>{category}</Text>
      <FlatList
        data={itemsByCategory[category]}
        renderItem={({item, index}) => renderItem(item)}
        keyExtractor={(item, index) => index.toString()}
        numColumns={3}
      />
    </View>
  );

return (
    <FlatList
      data={Object.keys(itemsByCategory)}
      renderItem={({item, index}) => renderCategory(item)}
      keyExtractor={(item, index) => index.toString()}
    />
  );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM