Когда использовать MutableLiveData и LiveData - PullRequest
5 голосов
/ 30 апреля 2019

когда использовать MutableLiveData и LiveData означает область применения методов:

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

и когда использовать это,

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

Ответы [ 3 ]

1 голос
/ 30 апреля 2019

Допустим, вы следуете архитектуре 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 голосов
/ 30 апреля 2019

LiveData не имеет публичного метода для изменения своих данных.

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

Вы не можете обновить его значение, например getUser().setValue(userObject) или getUser().postValue(userObject)

Поэтому, если вы не хотите, чтобы ваши данные были изменены, используйте LiveData Если вы хотите изменить свои данные позже, используйте MutableLiveData

0 голосов
/ 30 апреля 2019

Мы должны вернуть LiveData для того, чтобы запретить представлениям (или другим наблюдателям) изменение значения аварии.

Имея:

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

Вы не можете написать в своей деятельности / фрагмент: getUser().setValue(...). Это делает ваш код менее подверженным ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...