【问题标题】:Forcing Paging Library DataSource refresh强制分页库数据源刷新
【发布时间】:2018-11-06 12:52:35
【问题描述】:

在我的 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&lt;PagedList&lt;Notification&gt;&gt; 不会收到通知。我可以做些什么来触发LiveData 刷新(ViewModel 知道何时发生更改)。

【问题讨论】:

标签: android-architecture-components android-jetpack android-livedata android-paging android-architecture-lifecycle


【解决方案1】:

您可以使用DataSource 中的invalidate() 方法触发数据更新。

使用分页库时,数据层会在表或行过时通知应用程序的其他层。为此,请从您为应用选择的 DataSource 类中调用 invalidate()

更多信息:Notify when data is invalid

【讨论】:

  • 谢谢。我什至在发布之前就尝试了 .invalidate() 路由,但它并没有做我想做的事情,它只是清除了整个 DataSource
  • @liminal 你想做什么?
  • .invalidate() 应该触发重新加载数据。因此,如果invalidate() 不起作用,那么您的数据实际上并没有在下面发生变化。
【解决方案2】:

根据官方文档: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&lt;Int, ItemResponse&gt;

希望对你有帮助!

【讨论】:

  • 在我的情况下,不工作......我做错了什么?或者可能是什么边缘情况?我发布了一个类似的问题,因为我仍然无法从分页的 recyclerView 刷新数据...您使用的是哪个版本?
  • 嗨@Amg91。你能发布你的源代码吗?所以我们可以检查一下。
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 2015-11-25
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
相关资源
最近更新 更多