我对如何在android中结合两种技术感到困惑,即
ViewModel 应该处理业务逻辑,即实际视图背后的层,并使用LiveData之类的数据将数据发送到视图。视图会观察此LiveData并根据更改进行更新
数据绑定库的存在是为了更轻松地绑定到视图并在另一个级别上与视图交互(例如,通过更新某些类的某些属性)
问题:
更新:找到了我的问题的官方文档。链接在这里: https://developer.android.com/topic/libraries/data-binding/architecture#viewmodel
答案 0 :(得分:1)
数据绑定的工作方式
考虑使用LiveData
,它位于ViewModel
内,并且是数据绑定库知道必须更新的字符串,例如TextView
的字符串。
数据绑定实际执行的操作类似于您在片段中明确执行的操作:
从您的Kotlin代码(Fragment/Activity
)订阅位于LiveData
内的ViewModel
属性,但是在这种情况下,数据绑定将为您更新视图值,因为您将指示从您的XML布局开始。
所以答案是(A):
您可以拥有一个ViewModel
类,其属性类型为LiveData<T>
,并且可以从Layout中直接使用它们,而无需像我前面提到的那样明确地从kotlin代码中订阅。 ViewModel仍然是用户视图的信息提供者,不同之处在于,数据绑定将代替您进行显式操作,而不是您进行显式操作。
class MyViewModel : ViewModel {
// view model doesn't know if Fragment/Activity is using data binding or not, it just continues providing info as normal.
val myString : MutableLiveData<String> = MutableLiveData()
init {
myString.value = "a value that data binding will print in a TextView for you"
}
private fun changeMyString() {
// Change the value in the future when you want and then data binding will print the text in your TextView for you.
myString.value = "other value to that TextView"
}
}
布局:
<TextView
android:text="@{myViewModel.myString}" />
资源
此Google Codelab非常有用,当我开始进行数据绑定时,它可以帮助我,这对我很有帮助。
如果您只想直接编写代码,android/sunflower是一个使用数据绑定的存储库,通常提供有用的jetpack功能示例。