react-native-swrefresh-hm
Version:
react native pull refresh push loadMore scrollView,listView下拉刷新下拉加载控件,支持自定义,简单好用
188 lines (159 loc) • 3.88 kB
JavaScript
/**
* Created by sww on 2016/10/20.
*/
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
Dimensions,
ListView,
} from 'react-native';
import {
SwRefreshScrollView,
SwRefreshListView,
RefreshStatus,
LoadMoreStatus
} from 'react-native-swRefresh'
const {width,height}=Dimensions.get('window')
export default class Main extends Component{
_page=0
_dataSource = new ListView.DataSource({rowHasChanged:(row1,row2)=>row1 !== row2})
// 构造
constructor(props) {
super(props);
// 初始状态
this.state = {
dataSource:this._dataSource.cloneWithRows([0,1,2,3,4,5,6,7,8,9])
};
}
render(){
// return this._renderScrollView() //ScrollView Demo ScrollView不支持上拉加载
return this._renderListView() // ListView Demo
}
/**
* scrollVewDemo
* @returns {XML}
*/
_renderScrollView(){
return(
<SwRefreshScrollView
onRefresh={this._onRefresh.bind(this)}
ref="scrollView"
//其他你需要设定的属性(包括ScrollView的属性)
>
<View style={styles.content}>
<Text>下拉刷新ScrollView</Text>
</View>
</SwRefreshScrollView>
)
}
/**
* ListViewDemo
* @returns {XML}
* @private
*/
_renderListView(){
return(
<SwRefreshListView
dataSource={this.state.dataSource}
ref="listView"
renderRow={this._renderRow.bind(this)}
onRefresh={this._onListRefersh.bind(this)}
onLoadMore={this._onLoadMore.bind(this)}
//isShowLoadMore={false}
renderFooter={()=>{return
(<View style={{backgroundColor:'blue',height:30}}>
<Text>我是footer</Text>
</View>)
}}
/>
)
}
_renderRow(rowData) {
return (
<View style={styles.cell}>
<Text>{'这是第'+rowData+'行'}</Text>
</View>)
}
/**
* 模拟刷新
* @param end
* @private
*/
_onRefresh(end){
let timer = setTimeout(()=>{
clearTimeout(timer)
alert('刷新成功')
end()//刷新成功后需要调用end结束刷新
},1500)
}
/**
* 模拟刷新
* @param end
* @private
*/
_onListRefersh(end){
let timer = setTimeout(()=>{
clearTimeout(timer)
this._page=0
let data = []
for (let i = 0;i<10;i++){
data.push(i)
}
this.setState({
dataSource:this._dataSource.cloneWithRows(data)
})
this.refs.listView.resetStatus() //重置上拉加载的状态
end()//刷新成功后需要调用end结束刷新
// this.refs.listView.endRefresh() //建议使用end() 当然 这个可以在任何地方使用
},1500)
}
/**
* 模拟加载更多
* @param end
* @private
*/
_onLoadMore(end){
let timer = setTimeout(()=>{
clearTimeout(timer)
this._page++
let data = []
for (let i = 0;i<(this._page+1)*10;i++){
data.push(i)
}
this.setState({
dataSource:this._dataSource.cloneWithRows(data)
})
//end(this._page > 2)//加载成功后需要调用end结束刷新 假设加载4页后数据全部加载完毕
this.refs.listView.endLoadMore(this._page > 2)
},2000)
}
componentDidMount() {
let timer = setTimeout(()=>{
clearTimeout(timer)
// this.refs.scrollView.beginRefresh()
this.refs.listView.beginRefresh()
},500) //自动调用刷新 新增方法
}
}
const styles=StyleSheet.create({
container:{
},
content:{
width:width,
height:height,
backgroundColor:'yellow',
justifyContent:'center',
alignItems:'center'
},
cell:{
height:100,
backgroundColor:'purple',
alignItems:'center',
justifyContent:'center',
borderBottomColor:'#ececec',
borderBottomWidth:1
}
})