【发布时间】:2019-06-26 03:09:43
【问题描述】:
我只是无法弄清楚这段代码有什么问题,以及为什么在更新值时没有调用观察者。我正在使用带有 livedata 的 Fragment,这是完整的代码。当应用程序启动片段时,它从默认数据中获取值,在这种情况下为 100。但是在使用 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
【问题讨论】:
-
修复这一行:
var channelIdObservable = MutableLiveData(100)与这一行:var channelIdObservable = MutableLiveData<Int>() -
@DHAVALASODARIYA 这不是问题。
-
如果你是从其他线程调用
queueChannelId试试channelIdObservable.postValue (channelId)无论如何试试这个。我在这里看不到任何其他问题。 -
我的盲目猜测是,您要么重新分配
channelIdObservable,要么在不同的存储库实例上调用queueChannelId。 -
@SanlokLee 你说得对,经过一些调试,我发现存储库实例不同。我以为我的实例是单例的,但显然它是为每个视图模型创建的。所以我想这就是错误。感谢您的帮助。
标签: android viewmodel android-architecture-components android-livedata