使用PagedList,这里没有数据库,但是内存中的数据列表(称之为CachedDataList
)可以由fetchMore()
函数填充。
拥有PositionalDataSource
,DataSource.Factory
和PagedList.BoundaryCallback
,这只是一个问题。
流量是PositionalDataSource的loadInitial()
将在开始加载来自CachedDataList
的数据时调用,然后调用loadRange()
以继续从{{1}加载数据按页面大小。
当CachedDataList
的所有数据被分页时,CachedDataList
将被调用(如果开头没有后备数据,则调用BoundaryCallback::onItemAtEndLoaded()
),
在那里,它将开始要求fetchMore将更多数据附加到BoundaryCallback::onZeroItemsLoaded()
,并且当新数据附加到它时,然后调用DataSource的CachedDataList
以重新启动新的PagedList和DataSource对,并再次从PositionalDataSource的invalidate()
开始。
由
完成loadInitial()
这里,它观察observableCachedData的变化,如果有变化,那么
的observableCachedData.observe(owner, refreshHandler!!)
//??? TODO: how to only listen to newly posted data after
//starting the observe?
//DOC: 'If LiveData already has data set, it will be delivered to the observer.'
// fetchMore
val didFetch = dataRequester.fetchMore() //asyc call
onChanged()
将调用,并在其中调用DataSource的invalidate()
但是class RefreshHandler(val observableCachedData: MutableLiveData<List<Data>>) : Observer<List<Data>> {
override fun onChanged(datalist: List<Data>?)
的订阅会导致observableCachedData.observe()
立即被调用(它按照DOC中的说明设计),这里不需要这种行为,因为我们希望在新数据被调用时调用处理程序附加到refreshHandler
。
即。 CachedDataList
有30个数据,当fetchMore()时会有另外30个数据附加到它,变成60.但是这个CachedDataList
被调用时数据仍然是30(附加还没有到来) )。
有没有办法订阅实时数据,但只有在订阅后才会收到更新通知?
onChange()
答案 0 :(得分:0)
您可以使用SingleLiveEvent
答案 1 :(得分:0)
使其能够检查Using Observable.subscribe directly should work.like below
@Injectable()
export class HallService {
public http:Http;
public static PATH:string = 'app/backend/'
constructor(http:Http) {
this.http=http;
}
getHalls() {
// ########### No map
return this.http.get(HallService.PATH + 'hall.json');
}
}
export class HallListComponent implements OnInit {
public halls:Hall[];
/ *** /
ngOnInit() {
this._service.getHalls()
.subscribe(halls => this.halls = halls.json()); // <<--
}
}
中的已发布数据列表,只有在列表中添加了更多内容时才会失效。
(它应该寻找一种更好的方法来确定数据主义者真正增加了。)
RefreshHandler(val observableCachedData: MutableLiveData<List<Data>>)