java .lang.IllegalArgumentException: AsyncPagedListDiffer не может обрабатывать как непрерывные, так и несмежные списки - PullRequest
0 голосов
/ 03 августа 2020

Я использую android библиотеку подкачки Jetpack. и у меня есть следующий наблюдатель на моем MVVM. Observer = new Observer () {

        @Override
        public void onChanged(PagedList<Problem> problems) {
            Log.d(TAG, "onViewCreated: adapter size = " + problems.size());

            adapter.submitList(problems);
        }

    };

Теперь я получаю некоторые данные из базы данных и хочу отправить список адаптеру. Я провел небольшое исследование и нашел способ конвертировать список объектов в PagedList. Проблема в том, что всякий раз, когда я пытаюсь отправить новый список, я получаю следующее сообщение об ошибке: java .lang.IllegalArgumentException: AsyncPagedListDiffer не может обрабатывать как непрерывные, так и несмежные списки . Итак, есть ли способ изменить свой PagedList на Conteguos PagedList? Я думаю, что ответ состоит в том, чтобы сделать мой PagedList PagedList с одной страницей. любая помощь, пожалуйста?.

1 Ответ

0 голосов
/ 05 августа 2020

В Paging2 PagedList является либо смежным, либо мозаичным, чтобы обрабатывать случаи, когда пользователь может прокручивать далеко в заполнители, и вместо того, чтобы загружать много страниц рядом, вы хотите иметь возможность «перейти» к этой позиции и возобновить загрузку оттуда.

Итак, чтобы PagedList был выложен плиткой, он должен как:

  1. происходить из DataSource, который отменяет:
@Override
boolean isContiguous() {
    return false;
}
Заполнители должны быть включены через PagedList.Config.enablePlaceholders, так как это в основном выбирает поведение плитки (если оно поддерживается).

Ошибка, которую вы видите, в основном является предупреждением о том, что вы пытается поддерживать случай быстрой прокрутки / перехода, но с использованием DataSource, который поддерживает только загрузку соседних страниц.

Если вы еще не проверили его, я бы рекомендовал попробовать Paging3, так как он прочь от всей этой мозаики и обобщает концепцию прыжков на все типы DataSource s, обобщая их до одного типа PagingSource, который явно выбирает и определяет поведение прыжка.

Кроме того, поскольку вы намекнули что вы извлекаете данные из БД для отправки в виде списка stati c - обычным способом сделать это через что-то вроде Room или SqlDelite было бы использовать их встроенную поддержку Paging для непосредственного создания реализации DataSource.Factory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...