2017-04-01 55 views
1

我想要实现的无限滚动,所以我做这在我的ListView标签阵营本地的ListView onEndReached不叫

renderRow(data){ 
    return (
     <CardSection> 
      <Text> 
       {data.id} 
      </Text> 
     </CardSection> 
    ); 
} 

<ListView 
    dataSource={this.dataSource} 
    renderRow={this.renderRow} 
    onEndReached = {this.loadMoreNews.bind(this)} 
    pageSize = {5} 
/> 

我得到5个数据取每次我在loadMoreNews()和componentWillMount呼叫行动。因为前5个数据不能填满整个屏幕,我预计onEndReached会自动调用,因为它已经在ListView的末尾,但它不会。

我试图在renderRow文本标签的风格融入这个

renderRow(data){ 
    return (
     <CardSection> 
      <Text style={{height:100}}> 
       {data.id} 
      </Text> 
     </CardSection> 
    ); 
} 

和它的作品,因为我想要的。恐怕如果我的应用程序在宽屏设备上运行,我的renderRow将不会填满整个屏幕。

这是ListView的行为还是我错过了什么?解决办法是什么?我真的不想强迫我的组件变得非常大,所以它总是填满整个屏幕。

回答

0

您可以将组件内容大小与设备高度进行比较,并调用loadMoreNews fn。

const deviceHeight = Dimensions.get('window').height; 

<ListView 
    dataSource={this.dataSource} 
    renderRow={this.renderRow} 
    onLayout={(event) => { 
     var layout = event.nativeEvent.layout; 
     if(layout.height < deviceHeight) this.loadMoreNews() 
    }} 
    onEndReached = {this.loadMoreNews.bind(this)} 
    pageSize = {5} 
/> 
1

onEndReached ?:功能

当所有行已经提供,而该名单已滚动 内底部onEndReachedThreshold调用。本地滚动事件 提供。

除非用户滑动列表视图(宽屏幕方案),否则不会自动调用它。

您可能会set a threshold触发onEndReached而没有达到屏幕的底端。

onEndReachedThreshold:数

阈值以像素为单位(虚拟的,而不是物理)用于调用onEndReached。

或者,您可以手动调用loadMoreNews()当屏幕不能完全覆盖行。为此,只需测量CardSection组件的高度,然后将其分为Dimensions.get('window').height,即可为您提供适合当前屏幕的CardSection组件的编号。

如果您的行没有固定的高度,您可以使用onLayout函数。