全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

android中RecycleView添加下滑到底部的监听示例

我们的日常开发中经常用到下拉刷新,而网上评价最好的开源下拉刷新组件当然还是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列表实现加载更多的示例代码  # 加载  # 滑到  # 神马  # 自动加载  # 最好的  # 尤其是  # 在此  # 我们可以  # 可以通过  # 此类  # 我们必须  # 转换成  # 回调  # 开源  # 相对应  # 就比  # 其上  # 大家多多  # 就可以  # 条数 


相关文章: 家庭服务器如何搭建个人网站?  如何快速登录WAP自助建站平台?  建站之星如何实现网站加密操作?  实现虚拟支付需哪些建站技术支撑?  建站主机是什么?如何选择适合的建站主机?  高端网站建设与定制开发一站式解决方案 中企动力  手机网站制作与建设方案,手机网站如何建设?  黑客如何通过漏洞一步步攻陷网站服务器?  韩国服务器如何优化跨境访问实现高效连接?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  建站之家VIP精选网站模板与SEO优化教程整合指南  如何通过.red域名打造高辨识度品牌网站?  ,石家庄四十八中学官网?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  宝塔Windows建站如何避免显示默认IIS页面?  如何快速查询网站的真实建站时间?  购物网站制作公司有哪些,哪个购物网站比较好?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  网页设计与网站制作内容,怎样注册网站?  建站之星代理平台如何选择最佳方案?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何高效利用亚马逊云主机搭建企业网站?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  音乐网站服务器如何优化API响应速度?  做企业网站制作流程,企业网站制作基本流程有哪些?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  建站主机服务器选购指南:轻量应用与VPS配置解析  Swift中循环语句中的转移语句 break 和 continue  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  ui设计制作网站有哪些,手机UI设计网址吗?  建站之星如何快速解决建站难题?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  建站主机服务器选型指南与性能优化方案解析  如何选购建站域名与空间?自助平台全解析  定制建站流程解析:需求评估与SEO优化功能开发指南  如何在阿里云服务器自主搭建网站?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何高效配置IIS服务器搭建网站?  如何在建站主机中优化服务器配置?  建站之星图片链接生成指南:自助建站与智能设计教程  如何在腾讯云服务器上快速搭建个人网站?  ,sp开头的版面叫什么?  广州建站公司哪家好?十大优质服务商推荐  广州营销型建站服务商推荐:技术优势与SEO优化解析  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  网站好制作吗知乎,网站开发好学吗?有什么技巧? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。