Ich habe eine RecyclerView
, die ich versuche, eine unendliche Scroll-Funktion zu implementieren. Das Problem ist, dass der Code innerhalb der if-Anweisungen in der OnScrolled
-Methode zweimal ausgeführt wird. Heres meine aktuellen Code:RecyclerView Infinite Scroll Listener wird zweimal aufgerufen
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);
}
Dieser Code als Antwort auf eine separate SO Frage gestellt wurde, und andere Beispiele scheinen ähnlich zu funktionieren, aber ich habe noch die loadMore()
Methode zweimal ausgeführt wird erhalten, wenn die Unterseite des RecyclerView
erreicht, und ich bin mir nicht sicher warum.
Verwendung 'LimearLayoutManager # findLast [Completely] VisibleItemPosition()' Methode – pskink