I have a problem when using ViewModel
and LiveData
I am new using ViewModel and LiveData arch components and have the problem when using frag
It's how LiveData and ViewModel works. You are getting same ViewModel with same LiveData and LiveData has previous object, User for instance, with previous credentials when you call ViewModelProviders.of(this).get(MainViewModel::class.java)
. You can reset User of LiveData onPause()
or onStop()
to reset it to initial state.
I don't know how you call toast, if you can share your ViewModel and MainActivity i can be more specific.
Ok Finally found the problem and how to solve. LiveData is not designed for single events. For that reason there is a couple of ways to fix it or handle it, this two links were useful for me:
Jose Alcérreca's post dealing with this problem
Jose Alcérreca's EventObserver
Jose Alcérreca's SingleLiveEvent class
Basically:
In ViewModel:
var eventLiveData: MutableLiveData<Event<ErrorResponse>> = MutableLiveData()
and In Activity or Fragment:
viewModel.eventLiveData.observe(this, EventObserver {
it?.let {
shortToast(it.message)
}
})