У меня есть собственный PositionalDataSource, который загружает данные из курсора контент-провайдера.
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, я вызываю invalidate как;
listOfFinalizedInstances.value?.dataSource?.invalidate()
, где
lateinit var listOfFinalizedInstances : LiveData<PagedList<GeneralInstanceModel>>
В результате каждый элемент в списке над выбранным элементом не отображается. При вызове invalidate () кажется, что значение params.requestedStartPosition равно позиции элемента, который я выбрал в списке. например, если я выбрал третий элемент в списке (есть флажок) и выполнил действие. После действия я вызываю invalidate (). Список обновляется только выше третьей позиции.
Как я могу решить это?