片段实时数据观察器仅使用默认值调用一次

时间:2019-06-26 03:09:43

标签: android viewmodel android-architecture-components android-livedata

我只是无法弄清楚此代码中的错误以及为什么在更新值时未调用观察者的原因。我正在将Fragement与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未被随时调用。

ViewModel:

fun getChannelId() : MutableLiveData<Int> {
    return repository.getChannelId()
    }

存储库:

var channelIdObservable = MutableLiveData(100)

fun queueChannelId(channelId: Int) {
    channelIdObservable.value = channelId
}
fun getChannelId() : MutableLiveData<Int> = channelIdObservable

1 个答案:

答案 0 :(得分:0)

如果您是从其他某个线程调用queueChannelId,请尝试

channelIdObservable.postValue (channelId)

P.S:我在这里看不到其他任何问题。请分享您如何呼叫queueChannelId的代码。