前情提要:
Android 端Adapter分页,下拉刷新,上滑分页,
原有流程:上滑时,滑动触及底部,触发Adapter的onScrolled的方法
异常情况:第一页数据完全显示,导致上滑时,未触及底部,未触发Adapter的onScrolled的方法
修复:
第一页数据完全显示时,上滑无法触发Adapter的onScrolled,
判断,如果第一页数据在当前屏幕完全显示,则将数据的分页处理,放在onScrollStateChanged方法中处理
- 判断当前Adapter的第一项item的高度(仅适用于,列表的每一项item高度一致)
- 触发onScrollStateChanged方法时,判断当前itemHeight * count 是否大于 当前RecyclerView的完全高度(取的是RecyclerView的父级的高度)
- 如果大于,则不做处理,此时会触发onSrolled方法
- 如果小于,则进行分页数据处理
-
myRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (adapter.getItemHeight() * (adapter.getItemCount() - 1) < parentLayout.getHeight() && newState == SCROLL_STATE_IDLE) { // 数据一页显示完全,进行分页处理 ... } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int lastItemPosition = mLayoutManager.findLastCompletelyVisibleItemPosition(); if (lastItemPosition + 1 == adapter.getItemCount() && dy > 0) { ... } } });