什么时候使用MutableLiveData
和LiveData
意味着使用方法的领域:
MutableLiveData<User> getUser() {
if (userMutableLiveData == null) {
userMutableLiveData = new MutableLiveData<>();
}
return userMutableLiveData;
}
什么时候使用这个,
LiveData<User> getUser() {
if (userMutableLiveData == null) {
userMutableLiveData = new MutableLiveData<>();
}
return userMutableLiveData
}
LiveData没有公共方法来修改其数据。
LiveData<User> getUser() {
if (userMutableLiveData == null) {
userMutableLiveData = new MutableLiveData<>();
}
return userMutableLiveData
}
您无法像getUser().setValue(userObject)
或getUser().postValue(userObject)
那样更新其值
因此,当您不希望修改数据时,请使用LiveData
如果您想稍后修改数据,请使用MutableLiveData
假设您正在关注MVVM架构并将LiveData
作为可观察的模式从ViewModel
到您的Activity
。这样你就可以将变量作为LiveData
对象暴露给Activity
,如下所示:
class MyViewModel : ViewModel() {
// LiveData object as following
var someLiveData: LiveData<Any> = MutableLiveData()
fun changeItsValue(someValue: Any) {
(someLiveData as? MutableLiveData)?.value = someValue
}
}
现在在Activity
部分,你可以观察LiveData
但是为了修改你可以从ViewModel
调用方法,如下所示:
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
}
我们应该返回LiveData以防止意外(或其他观察者)意外修改值。
有:
LiveData<User> getUser() {
if (userMutableLiveData == null) {
userMutableLiveData = new MutableLiveData<>();
}
return userMutableLiveData
你不能写你的活动/片段:getUser().setValue(...)
。这使您的代码更容易出错。