Recyclerview预加载

先说下写文章的起因,本人在SmartRefreshLayout刷新群待了有一段时间了,最近群里要转移还是什么的,反正是要加新群,以后加群貌似是要收费入群,然后我们这些潜水党,现在可以免费入群,入群的福利呢,就是可以群主免费解决问题,不说收费入群的问题,说说这个问题怎么出来的呢;进群后先跟群主扯了会,混个脸熟,以后就可以厚脸皮的去问问题了,正好看到他们在说这个Recyclerview预加载的问题;本着多学好问的态度,本人就去百度,然后搜到了一篇不错的文章,附上链接(Ps:应该是个大神,反正比我厉害的都是大神)http://www.cnblogs.com/baiqiantao/p/6958811.html,但是看完懵逼了,好几种解决方案,还被说是不行的方案,有几种我确实也想到了,但是为什么被说成不靠谱的方案呢,然后我就去找了郭霖大神,郭神给我推荐了一种方案说是google采集用的方法;现贴出来,方便以后使用,附上郭神给的链接(Ps:需要翻墙)https://gist.github.com/ssinss/e06f12ef66c51252563e

下面是代码,很简单,翻不了墙的可以看下

// An highlighted block
public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener {
    public static String TAG = EndlessRecyclerOnScrollListener.class.getSimpleName();

    public int previousTotal = 0; // The total number of items in the dataset after the last load  总数据
    private boolean loading = true; // True if we are still waiting for the last set of data to load. 是否提前加载
    public int visibleThreshold = 5; // The minimum amount of items to have below your current scroll position before loading more.
    int firstVisibleItem, visibleItemCount, totalItemCount;
    private int current_page = 1;
    private LinearLayoutManager mLinearLayoutManager;

    public EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) {
        this.mLinearLayoutManager = linearLayoutManager;
    }
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        visibleItemCount = recyclerView.getChildCount();
        totalItemCount = mLinearLayoutManager.getItemCount();
        firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();

        if (loading) {
            if (totalItemCount > previousTotal) {
                loading = false;
                previousTotal = totalItemCount;
            }
        }
        if (!loading && (totalItemCount - visibleItemCount)
                <= (firstVisibleItem + visibleThreshold)) {
            // End has been reached

            // Do something
            current_page++;

            onLoadMore(current_page);

            loading = true;
        }
    }

    public abstract void onLoadMore(int current_page);
    public void reset(int previousTotal, boolean loading) {
        this.previousTotal = previousTotal;
        this.loading = loading;
    }
}
  endlessScrollListener=new EndlessRecyclerOnScrollListener(manager) {
            @Override
            public void onLoadMore(int current_page) {
                
                init(current_page);
            }
        };
  recycler_id.addOnScrollListener(endlessScrollListener);
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值