У меня есть метод который возвращает некоторое количество записей и общее их число в json, ответ примерно выглядит так:
{
hits:100
...тут идут переданные записи
}
В параметрах запроса можно указать два параметра limit - число передаваемых записей и page сдвиг по записям на limit.
Записей может быть около 1000 и грузить их сразу все очевидно нельзя. Я сделал некоторое подобие автоматической подгрузки, работает оно примерно так:
Делается превый запрос с page 0 и limit 50
После разбора ответа смотрим hits и делаем запрос еще раз.
Повторять до достижения цели
Мне не нравится несколько моментов
Грузятся сразу все элементы
При обновлении списка RecyclerView перескакивает на первый элемент
Как лучше поступить с этими двумя проблемами?
Ответ
// 1. У вас на экране не все, только то что видите, все остальные элементы дестроятся, как только "ушли" за пределы экрана.
// Для сохранения текущей позиции запомните высоту списка до //обновления, к примеру через `OnScrollListener`:
// private int mScrollY;
// private RecyclerView.OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() {
// @Override
// public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
// super.onScrolled(recyclerView, dx, dy);
// mScrollY += dy;
// }
// };
// После обновления данных вызывайте программно скролл
// mRecyclerView.scrollBy(0, mStateScrollY);
UPDATE
Со временем было вычитано более правильное решение. Добавьте метод в ваш адаптер для RecyclerView
public void setData(List
Как следствие без велосипедов адаптер добавит еще элементы в конец списка, без каких либо подергиваний или запоминании позиции скролла на экране.
Комментариев нет:
Отправить комментарий