RecyclerView прокручивает обновления данных с помощью Room и PagingListAdapter - PullRequest
0 голосов
/ 02 февраля 2019

Я создал пример проекта, чтобы показать проблему, с которой я боролся, используя 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

Я немного боролся с этой проблемой,и мне немного стыдно, потому что это кажется базовым использованием компонентов архитектуры, поэтому я был бы очень рад получить любую помощь.

1 Ответ

0 голосов
/ 05 февраля 2019

Хотя я не уверен, но это может вам помочь.

 PagedList.Config plConfig =
        new PagedList.Config.Builder()
        .setEnablePlaceholders(false)
        .setPrefetchDistance(30)
        .setPageSize(50).build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...