zoukankan      html  css  js  c++  java
  • RecyclerView滑动到底部自动加载

        你经常听到“上拉加载”这样的字眼吗?你知道这个功能是怎么实现的吗?这篇文章记录了我对“上拉加载”的实现,与大家一起分享。

        “上拉加载”针对的是RecyclerView或者Listview这样的列表控件(本文以RecyclerView为例),一般和“数据分页”配合使用,旨在实现“分页加载,随用随取”,从而避免了一个接口返回过多的数据。

        RecyclerView每加载一个item都会调用一次onBindViewHolder方法,并且只在item由不可见变为可见的时候才会调用此方法。我们可以通过onBindViewHolder方法来判断是否已经到达列表的底部。

    public void onBindViewHolder(CollectionViewHolder holder, int position) {
            holder.fillData(mData.get(position));
            if(position == getItemCount()-1){//已经到达列表的底部
                loadMoreData();
            }
        }

        上面代码中我们通过比较position和getItemCount判断当前加载的item是不是最后一条,如果是最后一条的话就要执行网络请求加载下一页数据。

        上面就是我实现“上拉加载”的核心思想。使用过程中仅仅这样还是不够的,还需要继续完善、优化,下面记录一下我是如何添加底部提示的。

        描述:如果所有的数据都已经加载完毕了(服务器已经返回了最后一页数据),我们在最后一条数据下面显示一个“没有更多”的提示。

        实现:这里要提一下RecyclerView加载item的原理:RecyclerView在加载item之前会调用getItemCount方法,然后调用相同次数的onBindViewHolder方法,显示相同条数的数据。现在我需要RecyclerView在原来数据的基础之上,多显示一条数据,所以我进行了如下修改:

    public int getItemCount() {
            return mData.size() + 1;
        }

    这样就为“提示”这根萝卜挖好了一个坑。可是onCreateViewHolder并没有position这样的参数,我们没有办法为普通数据项和最后一行的提示项生成特定的item。我是通过这样的方法解决这个问题的,我把数据项的展示布局和“没有更多”的布局放在同一个item当中,然后再根据onBindViewHolder传递过来的position来控制最终显示哪一个布局。

        上面是比较基础一点的操作,其实关于提示项的显示要比这个复杂得过,要考虑很多情况,如何判断服务器返回的是最后一页,已显示和未显示的判断和状态的更新。有时间再继续聊!

  • 相关阅读:
    linux 远程同步数据工具rsync (1)
    lamp+nginx代理+discuz+wordpress+phpmyadmin
    Linux nginx 配置 location 语法 正则表达式
    linux下用ctrl+r快速搜索history命令
    常用服务的默认端口
    nginx rewrite不支持if 嵌套也不支持逻辑或和逻辑并
    nginx的301与302如何配置
    nginx $document_uri 参数使用
    选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
    为什么托管代码要慢
  • 原文地址:https://www.cnblogs.com/hsji/p/4955957.html
Copyright © 2011-2022 走看看