Android getAdapterPosition всегда возвращает getItemCount - PullRequest
1 голос
/ 29 апреля 2020

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

@Override
public void onViewAttachedToWindow(@NonNull ViewHolder holder) {
    super.onViewAttachedToWindow(holder);
    if((getItemCount() -1) == holder.getAdapterPosition()){
        Log.e("TAGNews", "List Done!");
    }
}

или другой метод, реализованный в моем фрагменте:

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

                int visibleItemCount = manager.getChildCount();
                int totalItemCount = manager.getItemCount();
                int firstVisibleItem = manager.findFirstVisibleItemPosition();



                if (loading) {
                    if (totalItemCount > previousTotal) {
                        loading = false;
                        previousTotal = totalItemCount;
                    }
                }
                if (!loading && (totalItemCount - visibleItemCount)
                        <= (firstVisibleItem + visibleThreshold)) {
                    // End has been reached

                    Log.e("News!", "end called");

                    loadMoreNews();

                    loading = true;
                }
            }
        });

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

Я загружаю от 3 до 10 элементов из моего бэкэнда, и новости имеют одинаковую высоту.

Спасибо в совет!

1 Ответ

0 голосов
/ 03 мая 2020

Пожалуйста, измените свой второй код на это:

int lastCompletelyVisibleItemPosition;
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx,    int dy) {
            super.onScrolled(recyclerView, dx, dy);
            lastCompletelyVisibleItemPosition = ((LinearLayoutManager) binding.recycler.getLayoutManager()).findLastVisibleItemPosition();
            if (dy > 5)
                if (lastCompletelyVisibleItemPosition == models.size() - 1) {
                  loadMoreData();
                }

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...