Android 在flowable中区分初始调用和下一次发射
我目前订阅了一个使用RxJava2的可流动方法 假设我有一个订阅的方法Android 在flowable中区分初始调用和下一次发射,android,rx-java,rx-java2,Android,Rx Java,Rx Java2,我目前订阅了一个使用RxJava2的可流动方法 假设我有一个订阅的方法 public Flowable<UploadStatus> getStatusChanges() 公共可流动getStatusChanges() 我将第一次调用从数据库加载所有项目状态,因此基本上将加载我的recyclerview上的所有项目。 但一旦我订阅了,我将继续从该流媒体获取事件。我将从一个已确定的项目中获取单个更改,例如,已确定的项目已更改 如何将单个更改与初始加载区别开来?假设将结果封装到如下类
public Flowable<UploadStatus> getStatusChanges()
公共可流动getStatusChanges()
我将第一次调用从数据库加载所有项目状态,因此基本上将加载我的recyclerview上的所有项目。
但一旦我订阅了,我将继续从该流媒体获取事件。我将从一个已确定的项目中获取单个更改,例如,已确定的项目已更改
如何将单个更改与初始加载区别开来?假设将结果封装到如下类中:
class Wrapper {
public boolean firstLoad;
public UploadStatus uploadStatus;
//constructor omitted for brevity
}
getStatusChanges()
.map(item -> Wrapper(false, item))
.startWith(Wrapper(true, null)
.subscribe(result -> {
if(result.firstLoad) {
//show spinner
} else {
//handle normaly
}
})
你可以这样做:
class Wrapper {
public boolean firstLoad;
public UploadStatus uploadStatus;
//constructor omitted for brevity
}
getStatusChanges()
.map(item -> Wrapper(false, item))
.startWith(Wrapper(true, null)
.subscribe(result -> {
if(result.firstLoad) {
//show spinner
} else {
//handle normaly
}
})
另一种方法(根据我的回答改编)是使用publish
getStatusChanges().publish(items -> items.first().map(item -> Wrapper(true, item)).concatWith(items.skip(1).map(item -> Wrapper(false, item))))
您不使用的原因是什么?DiffUtils它用于不同的用例,用于更新recyclerview本身。我真正想让它区分最初的加载和之后的更新。我的想法是,当我订阅FlowTable时,第一次显示加载条或其他内容,然后我会更新recyclerview上更改的项目,但我想知道FlowTable何时完成第一次加载。第二,请仔细查看我将使用的内容,谢谢