Как сделать так, чтобы PagedListAdapter в архитектуре выдержал изменения конфигурации?

Новый Android PagedListAdapter - отличная библиотека для обработки подкачки в списке данных. Это хорошо работает для меня, только то, как сделать так, чтобы оно выдерживало изменения конфигурации (например, поворот экрана), как это делает ViewModel в Android Architecture?

1 ответ

Решение

Адаптер зависит от контекста активности, поэтому он не переживет изменения конфигурации. Вместо этого список будет настроен ViewModel, который выживает при изменениях конфигурации и соответственно обновляет пользовательский интерфейс. У вас должно быть что-то вроде следующего. В вашей деятельности onCreate:

val adapter = CheeseAdapter()
cheeseList.adapter = adapter
// Subscribe the adapter to the ViewModel, so the items in the adapter are refreshed
// when the list changes
viewModel.allCheeses.observe(this, Observer(adapter::setList))

В вашем viewModel:

val allCheeses = dao.allCheesesByName().create(0,
        PagedList.Config.Builder()
                .setPageSize(PAGE_SIZE)
                .setEnablePlaceholders(ENABLE_PLACEHOLDERS)
                .build())!!

Я рекомендую вам взглянуть на этот образец Google