实现的比较简单,原理就是在下一页有数据的情况下,ScrollView底部始终会有一个loading图表和加载中的文字,每次ScrollView滚动到底部时loading部分就会显示出来,然后去请求数据,数据请求回来追加到到列表中,这样loading就又被挤到下面去了。 怎么判断下一页是否有数据呢,就是比较请求后台的长度跟拿回来数据的列表的长度。
比如 ,如果每次请求20条数据,但是结果只返回了5条,那就是下一页没有数据了,这个时候就隐藏loading部分,显示出‘没有更多数据’的提示
ScrollView底部放一个loading —> 滚动到底部调用加载数据请求 —> 判断下一页是否有数据 —>有数据则追加数据,没有则显示没有数据提示
<ScrollView
bounces={false }
removeClippedSubviews={true }
style={{flex : 1 }}
onScroll={(evt )=> this .scrollHandle (evt)}
>
<View style ={{}} >
{ListView}//显示列表视图
</View >
{!this .state .noMoreData &&this .state .list .length != 0 && <View style ={styles.loadingCon} > //加载中。。。
<ActivityIndicator size ="small" color ="#ED4F4F" />
<Text style ={styles.loadingText} > 加载中...</Text >
</View > }
{this .state .noMoreData &&this .state .list .length != 0 &&<View > //没有更多数据显示
<Text style ={styles.noMoreDataText} > 没有更多数据</Text >
</View > }
</ScrollView >
滚动监听方法
scrollHandle (e ){
let y = e.nativeEvent .contentOffset .y ;
let height = e.nativeEvent .layoutMeasurement .height ;
let contentHeight = e.nativeEvent .contentSize .height ;
if (y + height >= (contentHeight-0.5 )&&this .state .tipslist .length !=0 ) {
this .queryData ()
}
}
上拉加载数据和数据加载情况判断
queryData(){
if (list.length > 0 ) {
this .setState ({
list : [...this .state .list , ...list],
});
} else {
this .setState ({
noMoreData :true
})
}
if (list.length < this .state .pagesize ){
this .setState ({
noMoreData :true
})
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?