Задать вопрос
@Drew20
Недопрограммист Android))

Как реализовать выполнение действия при достижении recyclerView вершины списка?

У меня есть recyclerView в приложении и я хочу сделать постраничную загрузку данных в него. Данные грузятся с сервера путем изменения offset и заполнением списка и адаптера. Хочу сделать аналог библиотеки от Google pagination library. Долгое время пытался ее использовать в приложении, но так и не смог привязать адаптер к ней, поэтому решил самостоятельно реализовать эту функцию. Из хорошего - при достижении нижней границы списка, все работает правильно и безотказно, а вот при достижении верхнего уровня списка ничего не могу придумать. Вот как реализована загрузка при достижении нижней границы списка. Есть интерфейс:
public interface OnBottomReachedListener {
    void onBottomReached(int position);
}


вот как он в адаптере прописан:
void setOnBottomReachedListener(OnBottomReachedListener onBottomReachedListener) {
        this.onBottomReachedListener = onBottomReachedListener;
    }


в onBindViewHolder:
if (position == getItemCount() - 1 && position != getItemCount()) {
            onBottomReachedListener.onBottomReached(position);
        }


и вот как в активности я подгружаю данные:
((ListAdapter) adapter).setOnBottomReachedListener(new OnBottomReachedListener() {
                            @Override
                            public void onBottomReached(int position) {
                                if (next_url != null) {
                                    getMessages(type, a_token, Integer.parseInt(Uri.parse(next_url).getQueryParameter("offset")));
                                }
                            }
                        });


этот код работает безотказно, а вот при достижении верха списка ничего не смог придумать рабочего. Думал сначала добавить scrollListener, но он работает как-то странно, срабатывает по два раза почему-то. Логика такая - вначале список формируется и первой позицией всегда по завершению формирования списка есть 0, дальше мы проматываем до самого низа списка, грузим данные (до этого момента все нормально), дальше у нас есть список с новыми данными, но уже и есть урл для перехода на предыдущую "страницу" с даными, но мы ничего не грузим после формирования списка, дальше мы например проматываем к середине списка и вновь возвращаемся к верху списка, тянем дальше список вниз и в этот момент можно отправлять запрос. Это как-бы бесконечный список или что-то типа такого. Никак не могу придумать как это реализовать, уже неделю сижу. Надеюсь на вашу помощь :)
  • Вопрос задан
  • 128 просмотров
Подписаться 2 Сложный 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@rasfront
React native разработчик
Можно сделать интерфейс с методом onTopReached
Далее сделать ссылку на данный интерфейс в адаптере. В методе onBindViewHolder проверять индекс текущего элемента (обычно это переменная пюposition). Если position == 0 то ты достиг вершины списка и в этот момент можешь вызывать метод onTopReached.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы