2017-04-01 38 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函數。