How do I center an item within a React Native ListView?

后端 未结 2 1322
南方客
南方客 2021-02-10 08:12

I\'m trying to center an item within a horizontal listView when selected. My current strategy is to first measure the item and scroll to the x coordinates of the referenced item

2条回答
  •  名媛妹妹
    2021-02-10 09:03

    In my opinion, you should use FlatList

    FlatList have a method scrollToIndex that allows to directly go to an item of your datas. It's almost the same as a ScrollView but smarter. Sadly the documentation is very poor.

    Here is an example of a FlatList I did

    let datas = [{key: 0, text: "Hello"}, key: 1, text: "World"}]
    
     this.onScrollEnd(e)} 
        ref="flatlist"
        showsHorizontalScrollIndicator={false}
        data={this.state.datas}
        keyExtractor={(item) => item.key}
        getItemLayout={(data, index) => (
            // Max 5 items visibles at once
            {length: Dimensions.get('window').width / 5, offset: Dimensions.get('window').width / 5 * index, index}   
        )}
        horizontal={true}
        // Here is the magic : snap to the center of an item
        snapToAlignment={'center'}  
        // Defines here the interval between to item (basically the width of an item with margins)
        snapToInterval={Dimensions.get('window').width / 5}    
        style={styles.scroll}
        renderItem={ ({item}) =>
             this.scrollToIndex(/* scroll to that item */)}
                style={styles.cell}>
                {item.text}
            
        }
    />
    

    More about FlatList : https://facebook.github.io/react-native/docs/flatlist#__docusaurus

提交回复
热议问题