【发布时间】:2016-02-09 06:46:59
【问题描述】:
我有一个RecyclerView,我试图在其中实现无限滚动功能。问题是,OnScrolled 方法中的 if 语句中的代码被执行了两次。这是我当前的代码:
public abstract class InfiniteScroll extends RecyclerView.OnScrollListener {
private LinearLayoutManager mLayoutManager;
private int previousTotal = 0;
private boolean loading = true;
private int visibleThreshold = 5;
int firstVisibleItem, visibleItemCount, totalItemCount;
private int current_page = 1;
public InfiniteScroll(LinearLayoutManager layoutManager) {
mLayoutManager = layoutManager;
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
visibleItemCount = recyclerView.getChildCount();
totalItemCount = mLayoutManager.getItemCount();
firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (totalItemCount - visibleItemCount)
<= (firstVisibleItem + visibleThreshold)) {
// End has been reached
// Do something
current_page++;
Log.d("moreitems", "why is this being called twice?");
loadMore(current_page);
loading = true;
}
}
public abstract void loadMore(int current_page);
}
此代码是作为单独 SO 问题的答案发布的,其他示例的功能似乎相似,但是当到达 RecyclerView 的底部时,我仍然得到 loadMore() 方法执行两次,我不知道为什么.
【问题讨论】:
-
使用
LimearLayoutManager#findLast[Completely]VisibleItemPosition()方法
标签: android android-recyclerview