android: endlessrecycleronscrollistener вызывает цикл

#android #android-recyclerview #infinite-scroll

#Android #android-recyclerview #бесконечная прокрутка

Вопрос:

Я использую следующий код для реализации бесконечной прокрутки. но проблема в том, что onScroll() метод продолжает непрерывно вызываться, и загрузка данных переходит в бесконечный цикл. чего мне здесь не хватает?

 public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener {

    public int previousTotal = 0; // The total number of items in the dataSet after the last load
    public  boolean loading = true; // True if we are still waiting for the last set of data to load.
    public int visibleThreshold = 0; // The minimum amount of items to have below your current scroll position before loading more.
    int firstVisibleItem, visibleItemCount, totalItemCount;
    public int current_page = 1;
    private LinearLayoutManager mLinearLayoutManager;


    public EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) {
        this.mLinearLayoutManager = linearLayoutManager;
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        visibleItemCount = recyclerView.getChildCount();
        totalItemCount = mLinearLayoutManager.getItemCount();
        firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();

        if (loading) {
            if (totalItemCount > previousTotal) {
                loading = false;
                previousTotal = totalItemCount;
            }
        }
        if (!loading amp;amp; (totalItemCount - visibleItemCount) <= (firstVisibleItem   visibleThreshold)) {

            current_page  ;
            onLoadMore(current_page);
            loading = true;
        }
    }
    public abstract void onLoadMore(int current_page);

    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
    }
}
  

и в моей деятельности:

 endlessRecyclerOnScrollListener = new EndlessRecyclerOnScrollListener(mLayoutManager) {
            @Override
            public void onLoadMore(int current_page) {
                  loadData()

            }
        };
        mRecyclerView.addOnScrollListener(endlessRecyclerOnScrollListener);
  

Комментарии:

1. Попробуйте это : codentrick.com/load-more-recyclerview-bottom-progressbar

Ответ №1:

Вот как я сделал бесконечную прокрутку, и у меня это работает идеально. Спасибо…

 private boolean loading = true;
int pastVisiblesItems, visibleItemCount, totalItemCount;
LinearLayoutManager mLayoutManager;


mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
{
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) 
    {
        if(dy > 0) //check for scroll down
        {
            visibleItemCount = mLayoutManager.getChildCount();
            totalItemCount = mLayoutManager.getItemCount();
            pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();

            if (loading) 
            {
                if ( (visibleItemCount   pastVisiblesItems) >= totalItemCount) 
                {
                    loading = false;
                    Log.v("...", "We reach Last Item!");

                    // fetch new data here or whatever you want.
                    DoPagination(); 

                }
            }
        }
    }
});