我有一个应用程序,有一个viewpager与4片段。我想用我的服务器中的数据填充所有片段。我在活动中加载数据,我想将它分发到所有片段。反应改造电话
所以我有这样的签名:
@GET("trashCan")
fun getTrashCans() : Observable<List<TrashCanDto>>
我调用该方法,并形成一个列表。
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([email protected], "Erro ao carregar informações",
Toast.LENGTH_SHORT).show()
e.printStackTrace()
}
override fun onNext(trashCanList: List<TrashCan>) {
mTrashCanList = trashCanList
}
})
然后,我有一个方法,从该名单中获得可观察:
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
}
嗯...这应该工作,但它没有。发生的情况是,我的第一个碎片变空了,而第四个碎片有空。 (第二和第三不应该有任何的数据......和他们不这样做)
所以我认为:当片段被创建,列表仍然是空的,所以在活动中可观察到有没有提供...但是当视图寻呼机进入第四个片段时,List不再为空,因此我的屏幕显示了数据。
我的问题是:如何使可观测的活动保持数据推入片段?现在,它仅在Observable被下标时才会推送数据...我想改变它,所以当有新数据时它会推送。
(我认为第一个可观测应与主题直接comunicate,位我不知道该怎么做......)
任何帮助表示赞赏!
'BehaviorSubject.from(mTrashCanList)' - 它只需要列表的当前值。它不会对列表更新做出反应。 –
感谢您的快速响应。这是我的问题的关键点......我不知道如何使它对更新作出反应 –