Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Хорошая практика в подгрузке списка

У меня есть метод который возвращает некоторое количество записей и общее их число в 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 data) { mStringData.addAll(data); // ваша коллекция данных для адаптера notifyItemInserted(getItemCount() - data.size()); }
Как следствие без велосипедов адаптер добавит еще элементы в конец списка, без каких либо подергиваний или запоминании позиции скролла на экране.

Комментариев нет:

Отправить комментарий