1. 程式人生 > >React Native之ListView的講解與應用

React Native之ListView的講解與應用

          在安卓原生開發中,ListView是很常用的一個列表控制元件,那麼React Native(RN)如何實現該功能呢,這裡簡單的講解下。

       ListView.js原始碼截圖:

       

      從原始碼中可知RN中的ListView是基於ScrollView擴充套件得來的,所以具有ScrollView的相關屬性。

      常用的屬性:

dataSource:資料來源,類似於安卓中我們傳入BaseAdapter的資料集合。

      renderRow:渲染某一行,類似於BaseAdapter中的getItem方法。

      onEndReached:

簡單說就是用於分頁操作,在安卓中原生開發中,我們需要自己實現相應的方法。

      onEndReachedThreshold:呼叫onEndReached之前的臨界值,單位是畫素。(預設值為1000)感覺這個1000設定很好,先如今使用者不差流量,所以將體驗做到最佳才是上上之策。

      refreshControl:ScrollView提供下拉重新整理功能。(該屬性是繼承與ScrollView)

renderHeader:渲染頭部View,類似於安卓ListView中的addHeader.

     以上的屬性基本可以解決一些常見的列表需求,如果我們想要實現網格的效果,也可以藉助該元件來實現,有點類似於安卓中的RecyclerView控制元件。

pageSize:渲染的網格數,類似於安卓GridView中的numColumns.

       contentContainerStyle:該屬性是繼承於ScrollView,主要作用於該元件的內容容器上。

     想要實現網格效果:需要執行下面三步驟:

1.配置pageSize確認網格數量:

<ListView
      automaticallyAdjustContentInsets={false}
      contentContainerStyle={styles.grid}
      dataSource={this.state.dataSource}
      renderRow={this.renderRow.bind(this)}
      pageSize={3}
      refreshControl={
         <RefreshControl
           onRefresh={this.onRefresh.bind(this)}
           refreshing={this.state.isLoading}
           colors={['#ff0000', '#00ff00', '#0000ff']}
           enabled={true}
           />
       }
      />



2.設定每一個網格的寬度樣式:

 itemLayout:{
    flex:1,
    width:Util.size.width/3,
    height:Util.size.width/3,
    alignItems:'center',
    justifyContent:'center',
    borderWidth: Util.pixel,
    borderColor: '#eaeaea'
  },

3.設定contentContainerStyle相應屬性:

 grid: {
    justifyContent: 'space-around',
    flexDirection: 'row',
    flexWrap: 'wrap'
  },

這裡簡單描述下flexWrap屬性:wrap、nowrap

wrap:空間不足的情況下自動換行,nowrap:空間不足,壓縮容器,不會自動換行;

效果圖:

       

在使用ListView中遇到了一些問題,如果有知道的還請告知下,謝謝~

1.ListView在使用onEndReached分頁載入時候,滑動過快滾動條會出現抖動效果,在安卓裝置上如果滑動過快有時候會出現滾動回退顯現,體驗上相當不友好。

2.在使用ListView製作網格效果的時候,如果個數不是pagesize的倍數,那麼UI顯示有問題,(如下圖)我想肯定是配置的問題,但是沒有找到相應的配置,這裡暫時記一下,如有知道的朋友告知下~,臨時解決方案:比較笨拙,追加空View,填充成整數倍的pagesize。