反应改造呼叫

我有一个应用程序,有一个viewpager与4个片段。 我想用我的服务器中的数据填充所有的片段。 我加载活动中的数据,我想分发给所有的片段。

所以我有这个签名:

@GET("trashCan") fun getTrashCans() : Observable<List<TrashCanDto>> 

我调用方法并填充List。

 ServiceGenerator.createService(ApiClient::class.java) .getTrashCans() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Subscriber<List<TrashCan>>(){ override fun onCompleted() { showProgress(false) } override fun onError(e: Throwable) { showProgress(false) Toast.makeText(this@TrashCansInfoActivity, "Erro ao carregar informações", Toast.LENGTH_SHORT).show() e.printStackTrace() } override fun onNext(trashCanList: List<TrashCan>) { mTrashCanList = trashCanList } }) 

然后我有一个方法从这个列表中获得Observable:

 override fun getObservable(): Observable<TrashCan> { return BehaviorSubject.from(mTrashCanList) } 

然后我在我的碎片中得到:

 fun newInstance(sectionNumber: Int, hasObservable: HasObservable<TrashCan>) : TrashCansInfoFragment { val fragment = TrashCansInfoFragment() fragment.setObservable(hasObservable.getObservable()) val args = Bundle() args.putInt(ARG_SECTION_NUMBER, sectionNumber) fragment.arguments = args return fragment } 

那么…这应该工作,但它没有。 碰巧,我的第一个碎片变空了,而第四个碎片有数据。 (第二和第三不应该有任何数据…他们没有)

所以我认为:当片段被创建时,列表仍然是空的,所以活动中的Observable没有任何提供…但是当视图寻呼机到达第四个片段时,List不是空的,所以我的屏幕显示数据。

我的问题是: 如何使活动中的Observable不断将数据推入片段? 现在,只有当Observable被下标时才会推送数据…我想改变它,所以当有新的数据的时候它会被推送。

(我认为第一个Observable应该直接和Subject交流,我不知道该怎么做…)

任何帮助表示赞赏!

你的问题是,这个操作只是列表的当前值,不会对更新做出反应(为什么要这样做?):

 BehaviorSubject.from(mTrashCanList) 

作为Activity中的一个选项,您可以将您的BehaviorSubject订阅到Observable

 ServiceGenerator.createService(ApiClient::class.java) .getTrashCans() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(yourSubject) 

然后返回它而不是你的主题:

 override fun getObservable(): Observable<TrashCan> { return yourSubject.asObservable() }