【发布时间】:2016-11-09 15:46:55
【问题描述】:
我有一个带有 4 个片段的 viewpager 的应用。我想用来自我的服务器的数据填充所有片段。我在活动中加载数据,并希望将其分发到所有片段。
所以我有这个签名:
@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(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 没有什么可提供的......但是当视图分页器在第四个片段中获取时,列表不再为空,所以我的屏幕显示数据。
我的问题是:如何让 Activity 中的 Observable 不断将数据推送到 Fragment 中? 现在,它只在订阅 Observable 时才推送数据...我想更改这个,所以当有新数据时它会推送。
(我认为第一个 Observable 应该直接与 Subject 通信,有点我不知道该怎么做......)
感谢任何帮助!
【问题讨论】:
-
BehaviorSubject.from(mTrashCanList)- 它只取列表的当前值。它不会对列表更新做出反应。 -
感谢您的快速响应。这是我问题的关键点......我不知道如何让它对更新做出反应
标签: android android-fragments rx-java kotlin