ReactNative之ListView

来源:互联网 发布:2017低价备案域名交易 编辑:程序博客网 时间:2024/06/06 10:59

ListViewFlatList功能差不多。。。使用方法略有不同

使用前引入。。。

首先创建一个有很多数据的数组

var arr = [..................];

然后使用这个数组构建一个ListView的数据源对象

This.state = {

ds: new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}).cloneWithRows(arr)

}

最后把这个数据源引入到ListView标签当中即可

<ListView

Ref={(lv)=>this.lv=lv}     //把自己的地址赋值给当前类对象的lv属性方便该类找到自己

contentContainerStyle={{flexDirection:'row',flexWrap:'wrap',justifyContent:'space-around'}}    //这种容器标签添加样式不应该直接用style属性而是contentContainerStyle

onScroll={(e)=>this.scroll(e)}  //滚动监听

dataSource={this.state.ds}   //数据源

renderRow={(rowData, sectionID, rowID, highlightRow)=>this.getItems(rowData, sectionID, rowID, highlightRow)}   // 根据数据源渲染每条数据

renderSeparator={(sectionID, rowID, adjacentRowHighlighted)=>this.divideLine(sectionID, rowID, adjacentRowHighlighted)}>   //每一行的分割线

</ListView>

scroll(e){

//通过e.nativeEvent.contentOffset.y可以获取滚动条的位置

}

getItems(rowData, sectionID, rowID, highlightRow){   //每条数据渲染的样式

return(

<Text>{rowDate.txt}</Text>

);

}

divideLine(sectionID, rowID, adjacentRowHighlighted){   //每条数据之间添加一条分割线

return(

<View key={rowID} style={{height:2,backgroundColor:’#eee’}}></View>  //注意key属性必须要有,否则报警告,提示复用,ListView不允许有重复的数据,这个View添加一个key属性并且值都不同,保证了唯一性。。。

);

}

 

还有一个注意点!!!这是一个大陷阱!!!

当数组中的数据改变的话界面这时候并不会立马改变,需要重新这一步操作:

this.setState({

ds:new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}).cloneWithRows(arr)

});

数据源对象不改变系统不会自动刷新界面的,必须新建一个数据源才可以刷新界面。。。

 

列表怎么可以少了下拉刷新功能呢!!!

前提!!!引入RefreshControl

ListView中添加以下属性:

refreshControl = {

<RefreshControl

refreshing={this.state.refresh   boolean值,控制是否处于刷新状态}

onRefresh={this._onRefresh 这是一个方法控制刷新内容}

colors={[‘#f00’ , ‘#0f0’ , ‘#00f’]} 刷新进度条每转一圈换一种颜色

progressBackgroundColor=”#fff” 进度条背景颜色

/>

}

 

_onRefresh(){

this.setState({

    refresh:true

});

//假如在这里更新列表数据需要从新new一个数据源对象,参考上面的陷阱。。。

最后更新完成后

this.setState({

   refresh:false

});

}

 

 

原创粉丝点击