3

在我的 ViewModel 中,我使用

private val pagingConfig = PagedList.Config.Builder()
    .setEnablePlaceholders(false)
    .setInitialLoadSizeHint(INITIAL_LOAD_SIZE_HINT)
    .setPageSize(PAGE_SIZE)
    .build()

val notificationList = LivePagedListBuilder<Long, Notification>(dataSourceFactory, pagingConfig).build()

哪个工作正常。但是,当我的数据更改时,LiveData<PagedList<Notification>>不会收到通知。我可以做些什么来触发LiveData刷新(ViewModel知道何时发生更改)。

4

2 回答 2

2

您可以使用invalidate().DataSource

使用分页库时,当表或行变得陈旧时,由数据层通知应用程序的其他层。为此,请invalidate()DataSource您为应用程序选择的课程中调用。

更多信息:数据无效时通知

于 2018-11-07T07:17:53.130 回答
0

根据官方文档:https ://developer.android.com/topic/libraries/architecture/paging/data#notify-data-invalid

你必须打电话dataSourceLiveData.value?.invalidate()

我从我的角度这样称呼它:

OnRefresh:视图实现SwipeRefreshLayout.OnRefreshListener

override fun onRefresh() {
    brewerViewModel.retry()
}

在我的视图模型中定义方法刷新:

fun refresh() {
    brewerDataSourceFactory.refresh()
}

就我而言,我正在使用改造从服务器获取数据

ItemResponse 是我从服务器获取的对象(改造)

class DataSourceFactory : DataSource.Factory<Int, ItemResponse>() {

    lateinit var dataSource: DataSource
    var dataSourceLiveData: MutableLiveData<DataSource> =
        MutableLiveData<DataSource>()

    override fun create(): DataSource<Int, ItemResponse> {

        dataSource = DataSource()
        dataSourceLiveData.postValue(dataSource)
        return dataSource

    }

    fun refresh() {
        dataSourceLiveData.value?.invalidate()
    }
}

在我的 DataSource 中定义如下:

class DataSource : PageKeyedDataSource<Int, ItemResponse>

我希望它有帮助!

于 2020-06-07T22:54:00.300 回答