package com.keylesspalace.tusky; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; public abstract class EndlessOnScrollListener extends RecyclerView.OnScrollListener { private int visibleThreshold = 15; private int currentPage = 0; private int previousTotalItemCount = 0; private boolean loading = true; private int startingPageIndex = 0; private LinearLayoutManager layoutManager; public EndlessOnScrollListener(LinearLayoutManager layoutManager) { this.layoutManager = layoutManager; } @Override public void onScrolled(RecyclerView view, int dx, int dy) { int totalItemCount = layoutManager.getItemCount(); int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); if (totalItemCount < previousTotalItemCount) { currentPage = startingPageIndex; previousTotalItemCount = totalItemCount; if (totalItemCount == 0) { loading = true; } } if (loading && totalItemCount > previousTotalItemCount) { loading = false; previousTotalItemCount = totalItemCount; } if (!loading && lastVisibleItemPosition + visibleThreshold > totalItemCount) { currentPage++; onLoadMore(currentPage, totalItemCount, view); loading = true; } } public void reset() { currentPage = startingPageIndex; previousTotalItemCount = 0; loading = true; } public abstract void onLoadMore(int page, int totalItemsCount, RecyclerView view); }