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 中用于 DataBinding
的 ObservableBoolean
怎么样:
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)
}
在 ViewModel 中,我们可以为 MutableLiveData
应用 Encapsulation
,如 Android architecture 所示:
private val _dataLoading = MutableLiveData<Boolean>()
val dataLoading: LiveData<Boolean>
get() = _dataLoading
因此 dataLoading
无法从 Fragment 或 Activity 更改,因为它是 LiveData
而不是 MutableLiveData
我们可以在 ViewModel class 中用于 DataBinding
的 ObservableBoolean
怎么样:
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)
}