Как обновить Pagedlist в библиотеке подкачки Android? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть собственный 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 (). Список обновляется только выше третьей позиции. Как я могу решить это?

...