When to use MutableLiveData and LiveData
LiveData has no public method to modify its data.
LiveData<User> getUser() {
if (userMutableLiveData == null) {
userMutableLiveData = new MutableLiveData<>();
}
return userMutableLiveData
}
You can't update its value like getUser().setValue(userObject)
or getUser().postValue(userObject)
So when you don't want your data to be modified use LiveData
If you want to modify your data later use MutableLiveData
Let's say you're following MVVM architecture and having LiveData
as observable pattern from ViewModel
to your Activity
. So that you can make your variable as LiveData
object exposing to Activity
like below :
class MyViewModel : ViewModel() {
// LiveData object as following
var someLiveData: LiveData<Any> = MutableLiveData()
fun changeItsValue(someValue: Any) {
(someLiveData as? MutableLiveData)?.value = someValue
}
}
And now at Activity
part, you can observe LiveData
but for modification you can call method from ViewModel
like below :
class SomeActivity : AppCompatActivity() {
// Inside onCreateMethod of activity
val viewModel = ViewModelProviders.of(this)[MyViewModel::class.java]
viewModel.someLiveData.observe(this, Observer{
// Here we observe livedata
})
viewModel.changeItsValue(someValue) // We call it to change value to LiveData
// End of onCreate
}