#android #recyclerview
У меня есть метод который возвращает некоторое количество записей и общее их число
в json, ответ примерно выглядит так:
{
hits:100
...тут идут переданные записи
}
В параметрах запроса можно указать два параметра limit - число передаваемых записей
и page сдвиг по записям на limit.
Записей может быть около 1000 и грузить их сразу все очевидно нельзя. Я сделал некоторое
подобие автоматической подгрузки, работает оно примерно так:
Делается превый запрос с page 0 и limit 50
После разбора ответа смотрим hits и делаем запрос еще раз.
Повторять до достижения цели
Мне не нравится несколько моментов
Грузятся сразу все элементы
При обновлении списка RecyclerView перескакивает на первый элемент
Как лучше поступить с этими двумя проблемами?
Ответы
Ответ 1
// 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(Listdata) { mStringData.addAll(data); // ваша коллекция данных для адаптера notifyItemInserted(getItemCount() - data.size()); } Как следствие без велосипедов адаптер добавит еще элементы в конец списка, без каких либо подергиваний или запоминании позиции скролла на экране.
Комментариев нет:
Отправить комментарий