У меня есть 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, дальше мы проматываем до самого низа списка, грузим данные (до этого момента все нормально), дальше у нас есть список с новыми данными, но уже и есть урл для перехода на предыдущую "страницу" с даными, но мы ничего не грузим после формирования списка, дальше мы например проматываем к середине списка и вновь возвращаемся к верху списка, тянем дальше список вниз и в этот момент можно отправлять запрос. Это как-бы бесконечный список или что-то типа такого. Никак не могу придумать как это реализовать, уже неделю сижу. Надеюсь на вашу помощь :)