kotlin 语言 TextInputEditText 如何配合 dataBinding 和 VideModel 完成双向绑定
时间: 2024-03-20 12:40:12 浏览: 80
要使用双向绑定,需要在布局文件中使用 `@={}` 表达式,同时在 ViewModel 中使用 `MutableLiveData` 来存储数据。
首先,在布局文件中,使用 `@={}` 表达式将 `TextInputEditText` 绑定到 ViewModel 中的 `MutableLiveData` 对象:
```xml
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hint="Enter your name">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={viewModel.name}" />
</com.google.android.material.textfield.TextInputLayout>
```
其中,`@={}` 表达式中的 `viewModel.name` 是在 ViewModel 中定义的 `MutableLiveData` 对象。
然后,在 ViewModel 中定义 `MutableLiveData` 对象,并提供 getter 和 setter 方法:
```kotlin
class MyViewModel : ViewModel() {
val name = MutableLiveData<String>()
fun setName(newName: String) {
name.value = newName
}
fun getName(): String? {
return name.value
}
}
```
注意,`name` 对象必须是 `MutableLiveData` 类型,以支持双向绑定。
最后,在 Activity 或 Fragment 中使用 DataBinding 绑定布局文件,并将 ViewModel 分配给绑定对象:
```kotlin
val binding = DataBindingUtil.setContentView<MainActivityBinding>(this, R.layout.main_activity)
binding.viewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
```
这样就完成了 TextInputEditText 和 ViewModel 的双向绑定。当用户输入文本时,ViewModel 中的 `MutableLiveData` 对象将自动更新,反之亦然。
阅读全文