java - Android Architecture Components如何实现对象与ViewModel的双向绑定(bind)

标签 java android kotlin android-databinding android-viewmodel

这是一个非常基本的 View 模型

class MainViewModel: ViewModel() {
    val text = MutableLiveData<String>()
    val person = MutableLiveData<Person>()
}

我正在尝试实现如下所示的双向绑定(bind)

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@={viewModel.text}"/>

这按预期工作,但在绑定(bind)对象时:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@={viewModel.person.name}"/>

我收到一个错误: 表达式 viewModelPersonGetValue.getName() 无法反转:双向绑定(bind)无法解析 java.lang.String 属性“名称”的 setter

看来我遗漏了什么,有什么想法吗?

(我使用的是 Android Studio 3.2 canary 1)

最佳答案

这应该适用于 Android Studio 3.1 及更高版本,只要您不忘记包含

val binding: ActivityMainBinding = ...
binding.viewModel = viewModel 
binding.setLifecycleOwner(this) // The editText won't update without this

关于java - Android Architecture Components如何实现对象与ViewModel的双向绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48657342/

相关文章:

java - 在进行平方之前如何计算超过 100 万所需的平方数

java - 是否有任何选项可以通过其属性从 Set/HashSet 中检索元素,而无需在 java 中创建整个对象?

java - LibGDX 计时器在 android 上恢复游戏后不启动

spring - 父表和子表之间的映射不正确

android - Java 8 "Optional"不好的做法?

java - 为什么Erlang中没有中间件?

java - 从独立类的 JTextBox 返回空值

android - 如何在 Android 谷歌搜索中添加自定义搜索源

android - 如何 Proguard 一个 android 项目及其模块和库?

java - 三个测试容器来自哪里?