何时使用MutableLiveData和LiveData

问题描述 投票:5回答:3

什么时候使用MutableLiveDataLiveData意味着使用方法的领域:

MutableLiveData<User> getUser() {
    if (userMutableLiveData == null) {
        userMutableLiveData = new MutableLiveData<>();
    }
    return userMutableLiveData;
}

什么时候使用这个,

LiveData<User> getUser() {
    if (userMutableLiveData == null) {
        userMutableLiveData = new MutableLiveData<>();
    }
    return userMutableLiveData
}
android android-architecture-components android-livedata
3个回答
0
投票

LiveData没有公共方法来修改其数据。

LiveData<User> getUser() {
    if (userMutableLiveData == null) {
        userMutableLiveData = new MutableLiveData<>();
    }
    return userMutableLiveData
}

您无法像getUser().setValue(userObject)getUser().postValue(userObject)那样更新其值

因此,当您不希望修改数据时,请使用LiveData如果您想稍后修改数据,请使用MutableLiveData


1
投票

假设您正在关注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
}

0
投票

我们应该返回LiveData以防止意外(或其他观察者)意外修改值。

有:

    LiveData<User> getUser() {
       if (userMutableLiveData == null) {
           userMutableLiveData = new MutableLiveData<>();
       }
    return userMutableLiveData

你不能写你的活动/片段:getUser().setValue(...)。这使您的代码更容易出错。

© www.soinside.com 2019 - 2024. All rights reserved.