关于recyclerView预加载数据问题

在recyclerView 预加载遇到的问题 解决方法

其中以下为全局变量

 private LinearLayoutManager linearLayoutManager;
    private int currentItemPosition = 0;  //用于临时保存第一出现要刷新数据时的item的position
    private boolean isNoMoreData;     //为 根据服务器返回的数据 是否有更多数据
  private int startLoadMorePosition = 3 ;// 当item滑动到list的倒数第三个位置是开启预加载
 

以下为关键代码:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
               LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
                int lastVisibleItemPosition = manager.findLastVisibleItemPosition();  //当前屏幕中最后一个可见的item 的postion
                int itemCount = manager.getItemCount();  // 获取item的总数
                if (lastVisibleItemPosition == (itemCount - startLoadMorePosition ) && dy >0 
                       && currentItemPosition !=lastVisibleItemPosition ){
                    currentItemPosition = lastVisibleItemPosition;  //记录item的position
                    if (!isNoMoreData){
                    // 开始加载
                        presenter.getList(getJSon(key,pageIndex));
                    }
                }
            }
        });




另外需要注意的是 在下拉刷新的是 需要将 currentItemPosition 置位0 恢复初始值

refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                   currentItemPosition = 0;
                // 你的下拉刷新代码
            }
        });

最下面是 对上面用法 我的解释 欢迎指正:

    lastVisibleItemPosition == (itemCount - startLoadMorePosition )  放item的倒数第三个可见时 开始预加载 

    dy > 0 表示 只有向下滑动屏幕 才可以

     currentItemPosition !=lastVisibleItemPosition   为了解决 recyclerView 滑动期间 倒数第三个item 
            从开始可见到完全可见过程中可能出现一直请求的方案.
            当倒数第三个item 开始可见时 (刚刚从屏幕底部滑动出现时)
              currentItemPosition 来记录lastVisibleItemPosition
           在从可见到完全可见 滑动过程中 lastVisibleItemPosition一直不变, 这样完全避免了,滑动过程中 .多次请求的问题

你可能感兴趣的:(关于recyclerView预加载数据问题)