我有一个自定义的PositionalDataSource,它从Content Provider游标加载数据。
class FinalizedInstanceDataSource() : PositionalDataSource<GeneralInstanceModel>() {
override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<GeneralInstanceModel>) {
callback.onResult(getInstances(params.loadSize, params.startPosition))
}
override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<GeneralInstanceModel>) {
callback.onResult(getInstances(params.requestedLoadSize, params.requestedStartPosition), 0)
}
private fun getInstances(limit: Int, offset: Int): MutableList<GeneralInstanceModel> {
val finalList = mutableListOf<GeneralInstanceModel>()
val cursor = InstancesDao().getFinalizedInstancesCursor(FormType.ALL, limit, offset)
....
}
数据源工厂定义为;
class FinalizedInstaceDataSourceFactory(): DataSource.Factory<Int, GeneralInstanceModel>() {
val sourceLiveData = MutableLiveData<FinalizedInstanceDataSource>()
var latestSource: FinalizedInstanceDataSource? = null
override fun create(): DataSource<Int, GeneralInstanceModel> {
latestSource = FinalizedInstanceDataSource()
sourceLiveData.postValue(latestSource)
return latestSource!!
}
}
在我的应用程序中,用户通过选中一个复选框在显示的列表中选择一个项目并执行一些操作。然后,该项目将在数据库中删除。要刷新PagedList,我将其视为无效;
listOfFinalizedInstances.value?.dataSource?.invalidate()
其中
lateinit var listOfFinalizedInstances : LiveData<PagedList<GeneralInstanceModel>>
结果是未显示所选项目上方列表中的每个项目。调用invalidate()时,似乎params.requestedStartPosition值等于我在列表中选择的项目的位置。例如,如果我选择了列表中的第三项(有一个复选框)并执行了一项操作。采取行动后,我致电invalidate()。该列表仅在第三个位置上方更新。 我该怎么解决?