Я настраиваю постраничный список элементов, которые я получаю в источнике данных с сопрограммами, также я наблюдаю этот список, чтобы отправить его в адаптер, но когда он первоначально загружает некоторые данные, он не вызывает обратный вызов наблюдения.Что я могу сделать, чтобы справиться с этим?
Я пытался отладить эту вещь, и я обнаружил, что список ArrayList> mCallbacks в PagedList, не содержит никаких обратных вызовов, когда он пытался уведомить об изменениях данных, но я незнать, что с этим делать.
Источник данных из данных будет выбран и выгружен.
class PagedDataSource(private val account: Account, private val getItems: GetItems): PageKeyedDataSource<Int, Item>() {
override fun loadInitial(
params: LoadInitialParams<Int>,
callback: LoadInitialCallback<Int, Transaction>
) {
GlobalScope.launch {
val startPage = 0
account.id?.let {
val items = getItems(it, startPage).body.toMutableList()
callback.onResult(items, null, 1)
}
}
}
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Item>) {
GlobalScope.launch {
account.id?.let {
val list = getItems(it, params.key)
val items = list.body.toMutableList()
callback.onResult(items, if (params.key >= list.totalPages) null else params.key + 1)
}
}
}
override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, Item>) {
//NO NEED
}
}
код во фрагменте:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
pagedAdapter = PagedAdapter()
vItems.layoutManager = LinearLayoutManager(context)
vItems.isNestedScrollingEnabled = false
vItems.adapter = pagedAdapter
items.observe(viewLifecycleOwner, Observer { items ->
if (items != null && items.isNotEmpty()) {
pagedAdapter.submitList(items)
} else {
vItemsTitle.visibility = View.VISIBLE
}
})
}
И, наконец, код в моемviewmodel
init {
items = initializedPagedList()
}
private fun initializedPagedList() : LiveData<PagedList<Item>> {
val factory = object: DataSource.Factory<Int, Item>() {
override fun create(): DataSource<Int, Item> {
return PagedDataSource(account, getItems)
}
}
val config = PagedList.Config.Builder()
.setPageSize(20)
.setEnablePlaceholders(false)
.build()
return LivePagedListBuilder(factory, config).build()
}
Я ожидаю, что данные будут извлечены после успешного вызова API в методе loadInitial и триггера обратного вызова наблюдения.