在开发中常常使用到刷新分页,这里实现一个 RecyclerView 的简单的刷新分页操作。
实现思路
- 加载更多数据使用到 RecyclerView 加载多种布局,根据 ViewType 判断加载数据 Item 还是加载 FooterItem ;
- 通过线程模拟加载数据;
- 为 RecyclerView 添加 addOnScrollListener 事件来监听用户的滑动操作;
- 根据用户滑动状态以及具体情况开始加载数据
- 通知数据更新;
如何获得 firstVisibleItemPosition
为了能够在数据加载中动态判断什么时候加载数据,需要知道屏幕上显示的第一个可见的 Item 的位置,当然了这里使用的是布局管理器是 LinearLayoutManager ,这样查找屏幕上第一个可见的 Item 就显得容易多了,下面介绍一些 LinearLayoutManager 的四个方法:
findFirstVisibleItemPosition()
获得屏幕上第一个可见 Item 的 position,只要该 Item 有一部分可见,那么返回的 position 就是该Item 的 position。
findFirstCompletelyVisibleItemPosition()
获得屏幕上第一个完整可见的 Item 的 position,只要该 Item 有一部分不可见,那么返回的 position 就是该 Item 对应的下一个能显示完整的 Item 的position。
findLastVisibleItemPosition()
获得屏幕上最后一个可见 Item 的 position,只要该 Item 有一部分可见,那么返回的 position 就是该Item 的 position。
findLastCompletelyVisibleItemPosition()
获得屏幕上最后一个完整可见的 Item 的 position,只要该 Item 有一部分不可见,那么返回的 position 就是该 Item 对应的上一个能显示完整的 Item 的position。
准备数据
|
|
代码参考
主布局
|
|
Item布局
|
|
|
|
Adapter
这里使用了 RecyclerView 根据不同的 ViewType 加载多种布局的用法,使用时根据不同的布局创建不同的 ViewHolder , 然后根据不同的 Viewholder 为对应的 Item 添加数据,注意 getItemViewType() 方法的用法,Adapter 代码参考如下:
MainActivity
这里主要注意 rv.addOnScrollListener(new OnScrollListener() …里面的具体实现,MainActivity 代码参考如下:
|
|
测试效果
<完>