提问人:MXC 提问时间:6/26/2019 更新时间:6/26/2019 访问量:1202
片段 livedata 观察器仅调用一次,默认值
Fragment livedata observer called only once with default value
问:
我只是无法弄清楚这段代码中出了什么问题,以及为什么在更新值时没有调用观察者。我正在将 Fragement 与 livedata 一起使用,这是完整的代码。当应用程序启动时,片段从默认数据中获取它的值,在本例中为 100。但是,在使用 method 更新值后,不会调用观察者。我放了一个打印语句,我可以看到方法在主线程中执行。请帮忙queueChannelId(channelId)
片段:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel =
ViewModelProviders.of(this).get(SomeViewModel::class.java)
viewModel.getChannelId().observe(this, Observer {
// Only called with default value of mutablelivedata
})
}
我可以保证 onDestroyView 和 onDestroy 在任何时候都没有被调用。
视图模型:
fun getChannelId() : MutableLiveData<Int> {
return repository.getChannelId()
}
存储 库:
var channelIdObservable = MutableLiveData(100)
fun queueChannelId(channelId: Int) {
channelIdObservable.value = channelId
}
fun getChannelId() : MutableLiveData<Int> = channelIdObservable
答:
0赞
Anmol
6/26/2019
#1
如果您从其他线程调用,请尝试queueChannelId
channelIdObservable.postValue (channelId)
PS:我在这里看不到任何其他问题。分享你如何调用的代码。queueChannelId
评论
0赞
MXC
6/26/2019
谢谢 Anmol,我发现了问题并更新了上面的评论部分。问题是我有不同的存储库对象实例。我想我将不得不使 repo 对象单例。
评论
var channelIdObservable = MutableLiveData(100)
var channelIdObservable = MutableLiveData<Int>()
queueChannelId
channelIdObservable.postValue (channelId)
channelIdObservable
queueChannelId