У меня проблемы с LiveData.
У меня есть 3 фрагмента A (menuFragment), B (doThingsFragment), C (displayMessageFragment). Мы можем перейти от A к B, от B к C и, наконец, от C к A.
В методе onStart doThingsFragment я наблюдаю LiveData From doThingsViewModel и перехожу к 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, и я перехожу к фрагменту C до того, как фрагмент B даже отобразится.
Поскольку значение _message не изменилось, я не ожидаю, что вызовет обратный вызов наблюдателя каждый раз при вызове метода doThingFragment.onStart ...
Что мне не хватает?
Большое спасибо !