《React-Native系列》19、 ListView组件之上拉刷新(iOS和Android通用)
ReactNative提供了RefreshControl下拉刷新组件,但是没有提供上拉刷新组件,上拉刷新在App中是很常用的。
今天我们来实现一个iOS和Android通用的上拉刷新功能。
下面简要介绍下我实现的思路。
如果你对ListView的基础知识不是很清楚,建议先移步:《React-Native系列》16、 RN组件之ListView
思路:
1、常量定义:
2、定义ListView
3、声明State状态机变量
ListView.DataSource实例(列表依赖的数据源)
这里我们主要声明了dataSource,这个没什么说的
loaded:用来控制整个页面的菊花
error:如果Request错误,显示一个错误页面
foot: 控制Footer的view
4、渲染页面前,加载数据
5、Load服务端数据
这里的细节挺多的:
1、当pageNum > 1时,就不要整个页面的菊花,此时loaded一直为true,这个主要是为了页面效果,要不然没加载一页数据,这个屏幕就会闪一下。
2、比较当前返回的list的大小,是否小于pageSize,控制Footer是否隐藏,还是显示已加载完毕
3、声明了一个全局的totalList对象,每次有新数据的时候,都push进去。
如果不采用push的方式的话,直接采用setState方法的话,第二页会把第一页的数据覆盖掉。
6、定义renderRow方法
renderRow={this._renderRow.bind(this)} 列表组件渲染函数 ,此处页面逻辑省略。
7、定义renderFooter方法
renderFooter 页脚会在每次渲染过程中都重新渲染。
根据状态机变量foot控制Footer的显示
8、onEndReached 定义
onEndReachedThreshold={0}
当所有的数据都已经渲染过,并且列表被滚动到距离最底部不足onEndReachedThreshold个像素的距离时调用。原生的滚动事件会被作为参数传递。译注:当第一次渲染时,如果数据不足一屏(比如初始值是空的),这个事件也会被触发
这里需要注意一下几点
1、第一屏的时候可能也会触发_endReached方法,所以需要判断foot为非 0(即加载中和已加载完毕)时,直接return
2、上拉时,触发_endReached方法,可能server端接口响应很快,几乎看不到菊花效果,特地加了个500毫秒的等待
9、卸载Timer
待优化点:
1、如果ListView的翻页较多的话,全局变量totalList会非常大,对内存是考验。
如果有问题疑问,可以留言交流。
相关文章
- Ros-routeros winbox for win,mac,android,ios客户端大全
- android中handler用法总结
- js -- 客户端判断 浏览器判断 微信判断 ios android web判断
- Android开发之深入理解Android Studio构建文件build.gradle配置
- android 添加 external 模块
- Android、IOS客户端RSA密钥生成
- 针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?
- android的tabhost+RadioGroup+PopupWindow
- 曝iPhone15或换用USB-C接口;Google将下架第三方Android通话录音APP|极客头条
- 极客日报第2期:雷军 小米明年将扩招5000名工程师;华为AI商标被合作方注册 ;Android 系统 13 岁了
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
- android studio 使用入门 (快捷键等收集)
- Android开发 - ActivityLifecycleCallbacks用法初探
- Android OOM的解决方式
- Flutter map List 等数据类型对应Android IOS的类型
- android带气泡的第三方选项卡
- android - android Couldn't load runtimecore_java from loader
- Flutter与Android iOS 的双向通信
- 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用
- react-native-smart-barcode目前最好用的二维码扫描组件(IOS、android)
- ReactNative实战系列 组件封装之Dialog(iOS和Android通用)
- react-native 可滑动日历,支持ios/android
- Android 源码阅读笔记
- Android、iOS和Windows Phone中的推送技术
- 我的Android进阶之旅------>Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题
- 我的Android进阶之旅------>Android使用AlarmManager全局定时器实现定时更换壁纸