我有一個RecyclerView
即時通訊試圖實現無限滾動功能。問題是,OnScrolled
方法中if語句內的代碼正在執行兩次。繼承人我當前的代碼:RecyclerView無限滾動監聽器被調用兩次
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 [完全] VisibleItemPosition()'方法 – pskink