我们的日常开发中经常用到下拉刷新,而网上评价最好的开源下拉刷新组件当然还是android-Ultra-Pull-To-Refresh 此组件可以给任何的控件添加下拉刷新功能。当然也包括recycleview了。

可惜android-Ultra-Pull-To-Refresh只是提供了下拉刷新的功能,但是对于列表类的组件,我们日常开发中更多的会用到其上拉加载或者滑到底部自动加载的功能,当然目前来看用户更喜欢滑到底部自动加载的功能。就比如今天说的recycleview我们只能自己给其添加滑到底部加载更多的功能了。
那它的实现原理是神马呢 非常简单:
RecycleView内部有一个滑动监听的抽象类OnScrollListener来接收滚动事件,此类里面有两个实现的方法
public abstract static class OnScrollListener {
/**
* Callback method to be invoked when RecyclerView's scroll state changes.
*
* @param recyclerView The RecyclerView whose scroll state has changed.
* @param newState The updated scroll state. One of {@link #SCROLL_STATE_IDLE},
* {@link #SCROLL_STATE_DRAGGING} or {@link #SCROLL_STATE_SETTLING}.
*/
public void onScrollStateChanged(RecyclerView recyclerView, int newState){}
/**
* Callback method to be invoked when the RecyclerView has been scrolled. This will be
* called after the scroll has completed.
* <p>
* This callback will also be called if visible item range changes after a layout
* calculation. In that case, dx and dy will be 0.
*
* @param recyclerView The RecyclerView which scrolled.
* @param dx The amount of horizontal scroll.
* @param dy The amount of vertical scroll.
*/
public void onScrolled(RecyclerView recyclerView, int dx, int dy){}
}
通多源码的注释可以了解到
onScrollStateChanged 当recyclerview的滚动状态发生变化的时候调用。
onScrolled 在布局可见和recycleview滚动的时候调用。
那么思路就是:
(1)在onScrollStateChanged 方法中判断当前的滚动状态是停止滚动的状态。
(2)然后根据api中的方法获得最后可见的位置。
(3)判断当前可见的recycleview中item的条数大于0
(4)判断最后可见的位置大于数大于item总数减一
(5)并且item的总数大于可见的item 这样可以保证超过一个界面的时候才执行。
当满足让面的要求的时候我们就可以通过接口回调执行我们的耗时逻辑 ,并显示出加载的dialog。
因为RecyclerView可以通过layoutManager灵活的转换成列表,表格,和瀑布流。尤其是瀑布流的时候,它的最后可见的位置是不一样的,所以我们必须根据其不同的layoutManager状态获取相对应的最后可见位置。
代码:
@Override
public void onScrollStateChanged(int state) {
if (state == RecyclerView.SCROLL_STATE_IDLE && mLoadingListener != null) {
LayoutManager layoutManager = getLayoutManager();
int lastVisibleItemPosition;
if (layoutManager instanceof GridLayoutManager) {
lastVisibleItemPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition();
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
int[] into = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];
((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(into);
lastVisibleItemPosition = findMax(into);
} else {
lastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
}
if (layoutManager.getChildCount() > 0
&& lastVisibleItemPosition >= layoutManager.getItemCount() - 1 && layoutManager.getItemCount() > layoutManager.getChildCount()) {
View footView = mFootViews.get(0);
footView.setVisibility(View.VISIBLE);
mLoadingListener.onLoadMore();
}
}
}
我们可以通过api获取瀑布流的所有的列 ,通过下面的方法找出最下面的一列。将加载的dialog显示在此列的下面。
private int findMax(int[] lastPositions) {
int max = lastPositions[0];
for (int value : lastPositions) {
if (value > max) {
max = value;
}
}
return max;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# recycleview滑动监听
# RecycleView监听滑动到底部
# recycleview
# 设置监听
# Android ExpandableListView实现下拉刷新和加载更多效果
# Android实践之带加载效果的下拉刷新上拉加载更多
# android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多
# Android中使用ScrollView实现滑动到底部显示加载更多
# Android RecyclerView添加上拉加载更多效果
# Android中RecycleView与ViewPager冲突的解决方法及原理
# Android RecycleView使用(CheckBox全选、反选、单选)
# Android 使用RecycleView列表实现加载更多的示例代码
# 加载
# 滑到
# 神马
# 自动加载
# 最好的
# 尤其是
# 在此
# 我们可以
# 可以通过
# 此类
# 我们必须
# 转换成
# 回调
# 开源
# 相对应
# 就比
# 其上
# 大家多多
# 就可以
# 条数
相关文章:
招贴海报怎么做,什么是海报招贴?
定制建站如何定义?其核心优势是什么?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
怎么将XML数据可视化 D3.js加载XML
建站之星安装后如何配置SEO及设计样式?
如何通过西部建站助手安装IIS服务器?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
相册网站制作软件,图片上的网址怎么复制?
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何通过FTP服务器快速搭建网站?
建站之星如何快速生成多端适配网站?
企业微网站怎么做,公司网站和公众号有什么区别?
如何在香港免费服务器上快速搭建网站?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何快速搭建二级域名独立网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
制作证书网站有哪些,全国城建培训中心证书查询官网?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何用VPS主机快速搭建个人网站?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何生成腾讯云建站专用兑换码?
如何快速搭建响应式可视化网站?
制作网页的网站有哪些,电脑上怎么做网页?
济南专业网站制作公司,济南信息工程学校怎么样?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何通过虚拟机搭建网站?详细步骤解析
javascript中的try catch异常捕获机制用法分析
江苏网站制作公司有哪些,江苏书法考级官方网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何撰写建站申请书?关键要点有哪些?
如何选择适合PHP云建站的开源框架?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何通过cPanel快速搭建网站?
建站DNS解析失败?如何正确配置域名服务器?
如何在阿里云虚拟服务器快速搭建网站?
如何使用Golang table-driven基准测试_多组数据测量函数效率
建站VPS选购需注意哪些关键参数?
如何在万网自助建站平台快速创建网站?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
如何在云指建站中生成FTP站点?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何在Golang中使用replace替换模块_指定本地或远程路径
定制建站策划方案_专业建站与网站建设方案一站式指南
大学网站设计制作软件有哪些,如何将网站制作成自己app?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。