在给定的PagingWithNetworkSample中:
@Query("SELECT * FROM posts WHERE subreddit = :subreddit ORDER BY indexInResponse ASC")
fun postsBySubreddit(subreddit : String) : DataSource.Factory<Int, RedditPost>
这里他们使用LimitOffsetDataSource<T> extends TiledDataSource<T>
作为提供者,
当特定表更新时,它将失效:
mObserver = new InvalidationTracker.Observer(tables) {
@Override
public void onInvalidated(@NonNull Set<String> tables) {
invalidate();
}
};
db.getInvalidationTracker().addWeakObserver(mObserver);
但在我的情况下:
class StatusDataSource() : PageKeyedDataSource<String, Status>() {
// additional code, not my expected
init {
db.invalidationTracker.addObserver(object : InvalidationTracker.Observer("statuses") {
override fun onInvalidated(tables: MutableSet<String>) {
invalidate()
}
})
}
override fun loadInitial(params: LoadInitialParams<String>, callback: LoadInitialCallback<String, Status>) {
val data = dao.loadInitial(path, params.requestedLoadSize)
if (data.isEmpty()) {
callback.onResult(data, null, null)
} else {
callback.onResult(data, null, data.last().id)
}
}
// additional code, not my expected
override fun isInvalid(): Boolean {
db.invalidationTracker.refreshVersionsAsync()
return super.isInvalid()
}
}
我已经创建了一个扩展PageKeyedDataSource
的类,但事情没有达到预期效果:如果room
中的数据用完,首先load()
将返回EMPTY,然后将触发BoudaryCallback
从服务器获取数据:
@MainThread
override fun onZeroItemsLoaded() {
helper.runIfNotRunning(PagingRequestHelper.RequestType.INITIAL) {
webservice.fetch_from_path(path = path, count = networkPageSize, id = uniqueId).enqueue(createWebserviceCallback(it))
}
}
我将项目插入db
后, 但是,StatusDataSource
并未使自己失效。
我需要添加上面的addtional代码,以观察“状态”表并使数据源无效吗?
但它似乎不是一种有效的方式......更糟糕的是,当加载数据时,recyclerView
不能在其滚动位置(底部)中保持,而是滚动到某个位置。看起来,这种失效方法可以与pagedList
('ー`)キラッ
如果有人给我一个很受欢迎的工作实例,请提前(1¯∀¯)