Я создал пример проекта, чтобы показать проблему, с которой я боролся, используя RecyclerView, Room и Paging, а именно: RecyclerView неожиданно прокручивает вниз при обновлении данных .
https://github.com/HappyPeng2x/RoomRecyclerViewExample
Приложение имеет базу данных Room, и я использую адаптер, полученный из PagedListAdapter, для отображения его значений в RecyclerView.
Запрос наблюдается, как показано в приведенном ниже коде, так чтокаждое обновление таблицы будет отражаться адаптером.
PagedList.Config plConfig =
new PagedList.Config.Builder().setEnablePlaceholders(false)
.setPrefetchDistance(10)
.setPageSize(20).build();
new LivePagedListBuilder<>
(mDB.getMyDao().getAllPaged(), plConfig)
.build()
.observe(this, new Observer<PagedList<MyEntry>>() {
@Override
public void onChanged(PagedList<MyEntry> myList) {
adapter.submitList(myList);
}
});
Для тестирования я заполняю таблицу 1 000 пар ключ / значение.Клавиши начинаются с 1 и заканчиваются на 1 000, и все значения инициируются как НАЧАЛЬНЫЕ.
Я включаю в каждый отображаемый элемент кнопку переключения;щелчок по нему переключит значение с НАЧАЛЬНОГО на ФИНАЛЬНОЕ и обратное.
При нажатии кнопки переключения на 155-м элементе отображаемое значение без каких-либо проблем изменяется с НАЧАЛЬНОГО на ЗАКЛЮЧИТЕЛЬНОЕ.
При выполнениита же операция на 243-м элементе, нажатие кнопки заставляет RecyclerView прокручивать вниз , , что не ожидается .
Проблема повторяется каждый раз, когда кнопканажал вокруг этой позиции.
Я сделал видеосъемку, чтобы можно было наблюдать проблему.
https://github.com/HappyPeng2x/RoomRecyclerViewExample/blob/master/videos/device-2019-02-02-105434.webm
Я немного боролся с этой проблемой,и мне немного стыдно, потому что это кажется базовым использованием компонентов архитектуры, поэтому я был бы очень рад получить любую помощь.