ViewModel中ObservableBoolean的封装class

Encapsulation for ObservableBoolean in ViewModel class

在 ViewModel 中,我们可以为 MutableLiveData 应用 Encapsulation,如 Android architecture 所示:

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

因此 dataLoading 无法从 Fragment 或 Activity 更改,因为它是 LiveData 而不是 MutableLiveData

我们可以在 ViewModel class 中用于 DataBindingObservableBoolean 怎么样:

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}">

那么,我们如何为 ObservableBoolean 应用 Encapsulation,如 Google 示例中所示?

你可以

private val loading = ObservableBoolean(false)

并在您的 vm

fun isLoading() = loading

如果您想更改 fragment/activity 的加载状态,您可以公开一个 setter

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