MutableLiveData赢得';t使用PagedList触发loadAfter从Android ROM获取

MutableLiveData赢得';t使用PagedList触发loadAfter从Android ROM获取,android,pagedlist,mutablelivedata,android-rom,android-pagedlistview,Android,Pagedlist,Mutablelivedata,Android Rom,Android Pagedlistview,我有70个iTen存储在我的ROM中,我想获取15个分页量。到目前为止,我读了很多关于相关问题的帖子,但是没有一篇对我有用 未触发loadAfter的一些可能原因: :调用getIteminsideonBindViewHolder :调用submitList至PagedListAdapter :用PagedListAdapter替换ListAdapter 我假设数据绑定很好,因为一切都可以在不尝试分页的情况下工作 我在模仿我的数据源来了解发生了什么。有些函数被挂起,因为它们应该有来自ROM的数据

我有70个iTen存储在我的ROM中,我想获取15个分页量。到目前为止,我读了很多关于相关问题的帖子,但是没有一篇对我有用

未触发
loadAfter
的一些可能原因:

:调用
getItem
inside
onBindViewHolder

:调用
submitList
PagedListAdapter

:用
PagedListAdapter
替换
ListAdapter

我假设
数据绑定
很好,因为一切都可以在不尝试分页的情况下工作

我在模仿我的数据源来了解发生了什么。有些函数被挂起,因为它们应该有来自ROM的数据,而ROM需要这些数据。我的代码状态如下:

适配器

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    getItem(position).let { wkda ->
        with(holder) {
            wkda?.apply { bind(createOnClickListener(this)) }
        }
    }
}

片段

vm.manufacturers.observe(viewLifecycleOwner) { manufacturers ->            
            adapter.submitList(manufacturers)
}
视图模型

var manufacturers: MutableLiveData<PagedList<WKDA>> = MutableLiveData()

init {
  viewModelScope.launch {
    repository.getManufacturers(manufacturers)
  }
}

我在这里遗漏了什么?

检查后:loadAfter被正确调用。问题在于模型本身:

wkda.id始终具有相同的“name”值


DiffCallback将旧的对象列表与新的对象列表进行了比较,但没有发现差异,因此没有将“duplicates”项添加到适配器中

您确定没有触发loadAfter吗?我想到的是它可以被调用,但列表中的新项目与适配器中已经存在的项目相同,因此新项目没有添加请回答:
返回WKDA(“name”,“author$key”)
每个模拟对象都被设置为
“name”
DiffCallback
正在比较
wkda.id
,它始终具有
“name”
值。从
ROM
中也可以看出iTen发生了什么。非常感谢。
suspend fun getManufacturers(manufacturers: MutableLiveData<PagedList<WKDA>>) {
        withContext(Dispatchers.IO) {
            manufacturers.postValue(ManufacturerPagedList.
                getInstance().
                fetchPage())
        }
}
private val executor = ManufacturerExecutor()

private val paginationConfig: PagedList.Config = PagedList.Config.Builder()
        .setPageSize(PAGE_SIZE)
        .setPrefetchDistance(FETCH_DISTANCE)
        .setEnablePlaceholders(false)
        .build()

companion object {
        @Volatile
        private var instance: ManufacturerPagedList? = null
            fun getInstance() = instance ?: synchronized(this) {
                ManufacturerPagedList().also {
                    instance = it
                }
        }
    }

fun fetchPage(): PagedList<WKDA> = PagedList.Builder<Int, WKDA>(
            MockDataSource(),
            paginationConfig)
            .setInitialKey(INITIAL_KEY)
            .setFetchExecutor(executor)
            .setNotifyExecutor(executor)
            .build()
}
class MockDataSource : PageKeyedDataSource<Int, WKDA>() {
    override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, WKDA>) {
        callback.onResult(List(20) { generatePost(params.requestedLoadSize) }.toList(), -1, 1)
    }

    override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, WKDA>) {
        callback.onResult(List(20) { generatePost(params.key) }.toList(), params.key + 1)
    }

    override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, WKDA>) {
        callback.onResult(List(20) { generatePost(params.key) }.toList(), params.key - 1)
    }

    private fun generatePost(key: Int): WKDA {
        return WKDA("name", "author $key")
    }
}
const val INITIAL_KEY: Int = 0
const val PAGE_SIZE: Int = 15
const val FETCH_DISTANCE: Int = 1