Сценарий
Привет, у меня есть Activity с ViewPager. В ViewPagerAdapter я создаю экземпляры одного и того же фрагмента с разными данными. И в каждом случае я инициализирую ViewModel
val dataViewModelFactory = this.activity?.let { DataViewModelFactory(it) }
mainViewModel = ViewModelProviders.of(this, dataViewModelFactory).get(MainViewModel::class.java)
В моем фрагменте я наблюдаю два MutableLiveData при вызове API
mainViewModel.isResponseSuccessful.observe(this, Observer { it ->
if(it) {
//do Something
}else{
Toast.makeText(activity, "Error in Sending Request", Toast.LENGTH_SHORT).show()
}
})
mainViewModel.isLoading.observe(this, Observer {
if (it) {
println("show progress")
} else {
println("dismiss progress")
}
})
В каждом фрагменте по нажатию кнопки я загружаю другой фрагмент. И при необходимости вызов и API для получения данных.
ПРОБЛЕМА
В моем фрагменте код попадает в блок наблюдения несколько раз. Когда я возвращаюсь от одного фрагмента к предыдущему, даже если API не вызывается, код в блоке наблюдения выполняется.
Что я пробовал
Я пробовал использовать экземпляр активности в инициализации ViewModel
mainViewModel = ViewModelProviders.of(activity,dataViewModelFactory).get(MainViewModel::class.java)
Но не вышло.
Пожалуйста помоги,
ViewModelProvider
возвращает существующую модель просмотра вместо создания новой, так что liveata может быть уже установлена, и любое значение, которое она содержит, испускается. - person Pawel   schedule 24.08.2020