分页库:如何按需重新加载部分数据?

时间:2017-10-28 10:22:06

标签: android pagination android-architecture-components android-paging

我使用Paging Library对我的数据集进行分页。我尝试做的是在数据库中的数据发生更改后刷新export default class NewHome extends Component { render() { return ( <div> {this.props.children} </div> ); } }

我有RecyclerView

LiveData

val listItems: LiveData<PagedList<Snapshot>> = object : LivePagedListProvider<Long, Snapshot>() { override fun createDataSource() = SnapshotsDataSource() }.create(null, PagedList.Config.Builder() .setPageSize(PAGE_SIZE) .setInitialLoadSizeHint(PAGE_SIZE) .setEnablePlaceholders(false) .build() )

DataSource

class SnapshotsDataSource : KeyedDataSource<Long, Snapshot>(), KodeinGlobalAware { val db: FirebaseDb = instance() override fun getKey(item: Snapshot): Long = item.timestamp override fun loadInitial(pageSize: Int): List<Snapshot> { val result = db.getSnapshotsTail(pageSize) return result } override fun loadAfter(key: Long, pageSize: Int): List<Snapshot> { val result = db.getSnapshotsTail(key, pageSize) return result.subList(1, result.size) } override fun loadBefore(key: Long, pageSize: Int): List<Snapshot> { return emptyList() } } 是直截了当的,所以我在这里省略。

我在修改数据库时尝试这样做:

Adapter

但它没有帮助。

3 个答案:

答案 0 :(得分:2)

尝试致电listItems.value!!.datasource.invalidate() 不是直接DataSource#invalidate()

答案 1 :(得分:1)

我在使用基于Firestore的自定义数据源时遇到了同样的问题。加载一部分数据而又不使所有数据无效并使UI刷新/重新加载的唯一方法似乎是通过与Google的Room ORM库集成。不幸的是,这将两次缓存我的数据,一次是使用Firestore,另一次是使用Room。

请参阅Consider How Content Updates Work下的文档。进行实时更新的唯一方法是通过使用PagedList实现Room:如果您是直接从Room数据库中加载数据,更新将自动推送到应用程序的UI。

答案 2 :(得分:0)

不可能。您只能使整个列表无效:datasource.invalidate()。