【发布时间】:2020-09-30 12:56:19
【问题描述】:
我在使用 LiveData 时遇到问题。
我有 3 个片段 A (menuFragment)、B (doThingsFragment)、C (displayMessageFragment)。 我们可以从 A 移动到 B,从 B 移动到 C,最后从 C 移动到 A。
在 doThingsFragment 的 onStart 方法上,我观察来自 doThingsViewModel 的 LiveData,并在此值更改时移动到 displayMessageFragment。
doThingsViewModel :
private var _message : MutableLiveData<String> = MutableLiveData()
var message : LiveData<String> = _message
fun someFunction() {
_message.value = "blablabla"
}
doThingsFragment:
override fun onStart() {
super.onStart()
mViewModel!!.message.observe(
viewLifecycleOwner,
Observer<String>
{
msg ->
if(!msg.isNullOrEmpty() && mViewModel!!.toastType.value != null){
val args = Bundle()
args.putString("message", msg)
Navigation.findNavController(requireView()).navigate(R.id.mountUnmountValidationFragment, args)
}
})
}
我第一次更新 _message 时效果很好(我们按预期从 B 转到 C)。 但是,当我再次尝试从 A 移动到 B 时,我们再次进入 doThingsFragment 观察者回调,并且在片段 B 甚至显示之前,我继续移动到片段 C。
由于 _message 值没有改变,我希望每次调用 doThingFragment.onStart 方法时都不会触发观察者回调...
我错过了什么?
非常感谢!
【问题讨论】:
标签: android kotlin fragment android-livedata mutablelivedata