У меня есть ViewModel, управляющий моей бизнес-логикой, и я использую Koin, чтобы внедрить это в свою деятельность и каждый из моих фрагментов. Однако после перехода от фрагмента A к фрагменту B и перехода обратно к фрагменту A мой наблюдатель снова запускается. Почему это происходит и как я могу остановить запуск этого onChanged при переходе назад?
Я попытался установить оба параметра: this и viewLifecycleOwner в качестве LifecycleOwner LiveData.
Iтакже пытались переместить наблюдаемое в onCreate, onActivityCreated и onViewCreated
My ViewModel:
class MyViewModel : ViewModel() {
private val _myData = MutableLiveData<Data>()
val myData = LiveData<Data>()
get() = _myData
fun doSomething() {
... // some code
_myData.postValue(myResult)
}
MyActivity:
class Activity : BaseActivity() {
private val viewModel by viewModel<MyViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
setSupportActionBar(main_toolbar)
subscribeUI()
}
private fun subscribeUI() {
myViewModel.isLoading.observe(this, Observer {
toggleProgress(it)
})
}
}
Фрагмент A:
class FragmentA : BaseFragment() {
private val viewModel by sharedViewModel<MyViewModel>()
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
subscribeUI()
}
private fun subscribeUI() {
viewModel.myData.observe(viewLifecycleOwner, Observer {
val direction =
FragmentADirections.actionAtoB()
mainNavController?.navigate(direction)
})
}
}
Фрагмент B:
class FragmentB : BaseFragment() {
private val authViewModel by sharedViewModel<LoginViewModel>()
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
subscribeUI()
}
private fun subscribeUI() {
viewModel.otherData.observe(viewLifecycleOwner, Observer {
// Do something else...
})
}
}
Когда я перемещаюсь из Фрагмента A -> Фрагмента B, все работает, как я ожидаю. Однако, когда я возвращаюсь к Фрагменту A из Фрагмента B (нажатием кнопки назад), вызывается метод onChanged из Обозревателя на myData, и навигация возвращается к Навигации B.