Размер выгружаемого списка LiveData всегда равен 0 - PullRequest
0 голосов
/ 24 июня 2019

Я реализовал пейджинг с помощью библиотеки пейджинга Android. ViewModel возвращает LiveData<PagedList<MyObject>>, и я вижу, что во фрагменте, где я установил адаптер, все работает хорошо, за исключением того, что когда я хочу проверить, размер списка всегда равен 0.

viewModel.getSearchResults().observe(this, mList -> {
           adapter.submitList(mList);
           Log.e("Count", String.valueOf(mList.size()));
       });

Где mList является PagedList<MyObject>

1 Ответ

1 голос
/ 24 июня 2019

Если вы посмотрите на Загрузка данных из PagedList документации, вы заметите следующее:

Если вы используете LivePagedListBuilder, чтобы получить LiveData<PagedList>, этоинициализирует PagedLists в фоновом потоке для вас.

Кроме того, Изменчивость и Снимки заявляет следующее:

PagedList является изменяемым во время загрузки,или готов загрузить из своего источника данных.При успешной загрузке изменяемый PagedList будет обновляться через Runnables в главном потоке.Вы можете прослушать эти обновления с PagedList.Callback.(Обратите внимание, что PagedListAdapter будет прослушивать их, чтобы сообщить RecyclerView об обновлениях / изменениях.)

Если вы хотите прослушивать события onInserted, onChanged или onRemoved, вы можетесделайте следующее:

viewModel.observableData.observe(viewLifecycleOwner, Observer { pagedList ->
    adapter.submitList(pagedList)
    pagedList.addWeakCallback(null, object: PagedList.Callback() {
        override fun onChanged(position: Int, count: Int) {}
        override fun onInserted(position: Int, count: Int) {
            println("count: $count")
        }
        override fun onRemoved(position: Int, count: Int) {}
    })
})
...