Есть лента которая реализована при помощи RecyclerView, заполняю её при помощи AsyncTask.
Сейчас у меня идет постоянная загрузка постов с сервера и динамическое заполнение ленты.
Вопрос, как мне отследить что пользователь пролистал ленту к примеру до 50-го элемента после чего выполнить подгрузку новых постов
Вам нужно добавить к RecyclerView ScrollListener:
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
}
}
});
При скролле списка вызывается метод onScrolled(...) в котором проверяется условие dy > 0, которое означает, что список был проскроллен вниз.
Далее происходит получение номера последнего видимого элемента (на текущий момент), в зависимости от этого номера можете начинать загрузку следующих элементов.
Далее нужно проверить: если в данный момент идет загрузка, то делать ничего не нужно, если же элементы еще не загружаются, то нужно стартовать загрузку.
Тут еще есть несколько подводных камней, но общая идея такова.
И еще: с AsyncTask следует работать очень аккуратно: если AsyncTask – поле класса активити, то при изменении конфигурации устройства загруженные данные Вы уже не получите.
Можно, например, использовать AsyncTaskLoader, либо AsyncTask в retain-фрагменте (если Вы их используете), либо воспользоваться другими способами загрузки данных с сети, например, RoboSpice, либо какими-то другими.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей