Как настроить внешний вид React Native ListView RefreshControl

React Native ListView имеет встроенный элемент управления pull-to-refresh, называемый RefreshControl. Он очень прост в использовании.

Я хотел бы настроить внешний вид элемента управления для использования другого визуального дизайна, например, используя индикатор прогресса материала.

Как настроить внешний вид RefreshControl в React Native?

Ответ 1

Вы можете перехитрить его, выполнив:

  • настройка свойств transparent в ListView
  • Добавление компонента с позицией absolute

Пример:

<View style={{height:Dimensions.get('window').height}}>
  {/* custom refresh control */}
  <View
    style={{position:'absolute',
      width:Dimensions.get('window').width, height:60,
      alignItems:'center', justifyContent:'center'}}>
    <Progress.CircleSnail
      color={['red', 'green', 'blue']}
      duration={700} />
  </View>
  {/* list view*/}
  <ListView
    dataSource={this.state.dataSource}
    refreshControl={
      <RefreshControl
        onLayout={e => console.log(e.nativeEvent)}
        // all properties must be transparent
        tintColor="transparent"
        colors={['transparent']}
        style={{backgroundColor: 'transparent'}}
        refreshing={this.state.refreshing}
        onRefresh={() => {
          this.setState({refreshing:true});
          setTimeout(() => {
            this._addRows()
          }, 2000);
        }}
        />
    }
    renderRow={(rowData) => <Text>{rowData}</Text>} />
</View>

Это результат:

образец результата

Ответ 2

Вы можете полностью это сделать. Однако это требует некоторой работы. Вы можете начать с написания чего-то вроде этого.

<View style={styles.scrollview}>
  <View style={styles.topBar}><Text style={styles.navText}>PTR Animation</Text></View>
  <View style={styles.fillParent}>
    <Text>Customer indicator goes here...</Text>
  </View>
  <View style={styles.fillParent}>
    <ListView
      style={{flex: 1}}
      dataSource={this.state.dataSource}
      renderRow={(rowData) => <View style={styles.row}><Text style={styles.text}>{rowData}</Text></View>}
      ref='PTRListView'
    />
  </View>
</View>

Когда вы потянете, чтобы обновиться, вы должны увидеть текст "Пользовательский индикатор идет здесь..."

Следуя этому шаблону, вы можете разместить свой компонент вместо простого представления и текста.

Для кредитов, спасибо этой статье для этой идеи.