Инкапсуляция для ObservableBoolean в классе ViewModel - PullRequest
0 голосов
/ 12 апреля 2019

В ViewModel мы можем применить Encapsulation для MutableLiveData, как показано в Архитектура Android :

private val _dataLoading = MutableLiveData<Boolean>()
    val dataLoading: LiveData<Boolean>
        get() = _dataLoading

В результате dataLoading не может быть изменено из фрагмента или действия, так как это LiveData, а не MutableLiveData

Как насчет ObservableBoolean, который мы можем использовать для DataBinding в классе ViewModel, например:

val isLoading = ObservableBoolean(false)

Он не может быть приватным, поскольку мы используем его в DataBinding:

<data>
        <variable
                name="vm"
                type="com.sample.android.ui.DetailViewModel"/>
    </data>

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:visibleGone="@{!vm.isLoading}">

Итак, как мы можем применить Encapsulation для ObservableBoolean, как представлено в примере Google?

1 Ответ

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

вы могли бы иметь

private val loading = ObservableBoolean(false)

и в вашем vm

fun isLoading() = loading

если вы хотите изменить состояние загрузки по вашему фрагменту / активности, вы можете выставить сеттер

   fun setLoading(value: Boolean) {
       loading.set(value)
   }
...