2016-12-09 7 views
2

Когда я устанавливаю источник данных в свой список, управление обновлением (сбрасывание до обновления) отлично работает. Если источник данных пуст, я не могу сбрасывать его, чтобы обновить список.React Native: Refresh Control недоступен, если я очищаю источник данных Listview

Моя ListView выглядит следующим образом:

   <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 или любым другим способом, чтобы позволить тянуть вниз, чтобы обновить ListView, даже если источник данных пуст/нуль?

Я ищу эту функцию, потому что в первый раз я загружаю данные из Async Storage. При отключении для обновления я очищаю хранилище и извлекаю новые данные.

+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

Фигурное это, когда я тестировал приложение на моем телефоне, а не эмулятор. Просмотр списка всегда присутствует, хотя источник данных пуст. В моем случае listview начинался с того, что надпись «Текст» заканчивается на красной строке.

+0

Я абсолютно позиционирую «no content» вместо ListView и устанавливаю 'pointerEvents =" none "' на этом placeholder. Таким образом, ListView получает события касания! – Andreyco

+0

@Полезная благодарность за ответ, могли бы вы предоставить более подробную информацию о том, как вы это исправили? У меня возникли проблемы с вашим решением. – Boris

+0

Исправить было правильное расположение компонентов. Я установил текст видимости на основе переменной состояния как '{! This.state.visible && this.state.noData && <Посмотреть стиль = {styles.noData}> Нет новых обновлений! } ' Затем, имеющий refreshControl в ListView, завернутый в ScrollView с contentContainerStyle = {{сгибают: 1}} установлен в Scrollview. Таким образом, мой refreshControl работал с самого начала. – Sood

0

Вам необходимо использовать опору вызова refreshing={true} и с завершением процесса, независимость, если есть новые данные, или нет, вам нужно установить refreshing={false}, чтобы уведомить список о том, что у вас нет больше данных и скрыть индикатор загрузки.

render() { 
    return (
     <ListView 
     refreshControl={ 
      <RefreshControl 
      refreshing={this.state.refreshing} 
      onRefresh={this._onRefresh.bind(this)} 
      /> 
     } 
     ... 
     > 
     ... 
     </ListView> 
    );