нумерация страниц в Android с помощью RecyclelerView - PullRequest
0 голосов
/ 25 октября 2018

я делаю приложение для Android, в котором я выполняю нумерацию страниц с recyclerView.В основном у меня есть два recylerView в моем фрагменте.Я выполняю нумерацию страниц с помощью recylerview addOnScrollListener с одним recyclerView.но это не работает нормально.когда я ставлю это условие

if(dy > 0 ){

}

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

private void recyclerPagination() {
    rvRecProduct.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (dy > 0) {
                linearLayoutManager = (GridLayoutManager) rvRecProduct.getLayoutManager();
                visibleItemCount = recyclerView.getChildCount();
                totalItemCount = linearLayoutManager
                        .getItemCount();
                firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
                if (loading) {
                    if (totalItemCount > previousTotal) {
                        previousTotal = totalItemCount;
                        page++;
                        loading = false;
                    }
                }
                if (page <= limit) {
                    if (!loading && (firstVisibleItem + visibleThreshold + visibleItemCount) >= totalItemCount) {
                        loading = true;
                        getPagination();
                        Log.e("PageNO",String.valueOf(page));
                    }
                }
            }
        }
    });
}

1 Ответ

0 голосов
/ 06 апреля 2019

Разбиение на страницы Android с помощью Recycler View для загрузки более 10 страниц. Слушатель прокрутки пагинации. Класс:

    public abstract class PaginationScrollListener extends RecyclerView.OnScrollListener {

    LinearLayoutManager layoutManager;

    public PaginationScrollListener(LinearLayoutManager layoutManager) {
    this.layoutManager = layoutManager;
    }

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

    int visibleItemCount = layoutManager.getChildCount();
    int totalItemCount = layoutManager.getItemCount();
    int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();

    if (!isLoading() && !isLastPage()) 
    {
        if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount
                && firstVisibleItemPosition >= 0) 
        {
            loadMoreItems();
        }
    }

    }

    protected abstract void loadMoreItems();

    public abstract boolean isLastPage();

    public abstract boolean isLoading();}

Добавьте этот код в свое задание или фрагмент:

public static final int PAGE_START = 1;
private int CURRENT_PAGE = PAGE_START;
private boolean isLoading = false, isLastPage = false;

private RecyclerView recyclerView;
private LinearLayoutManager linearLayoutManager;

recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);

recyclerView.setAdapter(new MyAdapter(list))
recyclerView.addOnScrollListener(new PaginationScrollListener(linearLayoutManager) {
                    @Override
                    protected void loadMoreItems() {
                        isLoading = true;
                        CURRENT_PAGE++;
                        loadNextPage();
                    }

                    @Override
                    public boolean isLastPage() {
                        return isLastPage;
                    }

                    @Override
                    public boolean isLoading() {
                        return isLoading;
                    }
                });
...