2016-12-09 11 views
2

データソースをリストビューに設定すると、リフレッシュコントロール(リフレッシュにプルダウン)が正常に機能します。データソースが空の場合、私はリストビューをリフレッシュするためにプルダウンできません。React Native:リストビューのデータソースをクリアすると、リフレッシュコントロールが使用できない

私のリストビューは、次のようになります。

   <View contentContainerStyle={{flex: 1}}> 
        <ListView 
         style={styles.container} 
         dataSource={this.state.dataSource} 
         renderRow={(data) => <NotificationRow {...data}/>} 
         enableEmptySections={true} 
         refreshControl={ 
          <RefreshControl 
           refreshing={this.state.refreshing} 
           onRefresh={this._onRefresh.bind(this)} 
           tintColor="#ff0000" 
           title="Loading..." 
           titleColor="#ffffff" 
           colors={['#ffffff']} 
           progressBackgroundColor="#1976D2" 
          /> 
         } 
        /> 
       </View> 

私はListViewコントロールに設定する必要があります任意の小道具やデータソースは、/ nullに空の場合でも、リストビューをリフレッシュするためにプルダウン有効にする他の方法はありますか?

私は初めて非同期ストレージからデータをロードしているので、この機能を探しています。リフレッシュするためにプルダウンすると、ストレージをクリアして新しいデータを取得します。私は私の携帯電話の代わりに、エミュレータ上でアプリケーションをテストしたときにこれを考え出した

+0

どのようにデータソースを消去していますか?ちょうど 'null'に設定していますか? – martinarroyo

+0

私はこれをこのようにクリアします: this.setState({ dataSource:this.state.dataSource.cloneWithRows([])、 }); – Sood

+0

データソースをクラス外に移動してみてください。 const ds = new ListView.DataSource({rowHasChanged:(r1、r2)=> r1!= r2})と同様です。これは役に立ちます。 – eden

答えて

0

Pull down to refresh works if I pull from the region starting from red line

。リストビューは、データソースが空であっても常に表示されます。私の場合、リストビューはテキストビューが赤い線で終了したところから始まりました。

+0

私は絶対にListViewに "no content"プレースホルダを置き、そのプレースホルダに 'pointerEvents =" none "を設定します。このようにして、ListViewはタッチイベントを受け取ります! – Andreyco

+0

@Sood答えのおかげで、あなたはこれをどのように修正したかについてもう少し詳しく説明できますか?私はあなたの解決策に少し問題があります。 – Boris

+0

修正点は、コンポーネントレイアウトを正しく設定することでした。状態変数に基づいてテキストの可視性を設定しました '{!this.state.visible && this.state.noData && <表示スタイル= {スタイル.noData}> <テキストスタイル= {スタイル.noDataText} > 新しいアップデートはありません! } ' そしてcontentContainerStyle =とScrollViewに包まれたリストビューでrefreshControlを有する{{フレックス:1}} ScrollVIewに設定。このようにして、私のrefreshControlはトップから正しく機能しました。 – Sood

0

新しいデータがある場合は独立して処理を終了するか、refreshing={false}を設定してデータを持たないことを通知し、ローディングインジケータを非表示にする必要がある場合は、プロコールrefreshing={true}を使用してください。

render() { 
    return (
     <ListView 
     refreshControl={ 
      <RefreshControl 
      refreshing={this.state.refreshing} 
      onRefresh={this._onRefresh.bind(this)} 
      /> 
     } 
     ... 
     > 
     ... 
     </ListView> 
    ); 
関連する問題