我一直在使用RecyclerView实现新的Paging Library,其中应用程序构建在Architecture Components之上.
填充列表的数据来自Room数据库.实际上,它是从网络中获取的,存储在本地数据库中并提供给列表.
为了提供构建列表所需的数据,我实现了自己的自定义PageKeyedDataSource.一切都按预期工作,除了一个小细节.显示列表后,如果列表行元素的数据发生任何更改,则不会自动更新.因此,例如,如果我的列表显示了具有字段名称的项目列表,并且突然,该字段在本地Room数据库中针对特定行项目更新,则列表不会自动更新行UI.
仅当使用自定义DataSource时才会发生此行为,这与通过直接返回DataSource Factory从DAO自动获取DataSource不同.但是,我需要实现自定义DataSource.
我知道可以通过调用DataSource上的invalidate()方法来重新更新列表来更新它.但是,如果应用程序一次显示2个列表(例如每个半屏),并且此项目出现在两个列表中,则需要分别为两个列表调用invalidate().
我想过一个解决方案,其中,不是使用item的类的实例来填充每个ViewHolder,而是使用它的LiveData包装版本,使每行观察其自己项目的更改并在必要时更新该行UI .不过,我看到这种方法有一些缺点:
我根本不知道,即使考虑到这些缺点,它看起来似乎是一种体面的方法,或者,如果你们中的任何人知道任何其他更清洁和更好的方法来管理它.
先感谢您.
android list android-livedata android-architecture-components android-paging
我在我的应用程序中使用PagedList库。
使用PagedListAdapter,一切都能按预期工作。但是,我找不到如何获得回调并收到有关PagedList已更新的通知。
在列表的ItemKeyedDataSource用于从网络获取列表的数据。此时,将调用PagedListAdapter的SubmitList,提供长度为0的PagedList。当DataSource从网络中获取数据时,将执行其callback.onResult()并更新列表的UI,以显示获取的项目。但是,这不会调用SubmitList方法,并且由于未调用onCurrentListChanged,因此我没有在适配器中找到通知此更新的方法。如何将此类更改通知适配器?
谢谢 :)