在Android中使用数据绑定更新UI属性

在Android中使用数据绑定更新UI属性,android,Android,我正在浏览有关数据绑定的Android文档,并尝试了以下代码: data class User(var firstName: String, var lastName: String) val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main) val user = User("Steve", "Jobs") binding.user = user btn_c

我正在浏览有关数据绑定的Android文档,并尝试了以下代码:

data class User(var firstName: String, var lastName: String)

val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

val user = User("Steve", "Jobs")
binding.user = user

btn_change_firstname.setOnClickListener {
    user.firstName = "John"
}

文本视图将更新为名字和姓氏。但是,当我添加一个按钮,然后更改名字时,显示名字的文本视图不会更新。我还需要做些什么才能完成这项工作吗?

这是我的预期行为。将您的
firstName
/
lastName
包装到
observefield
中,或者开始使用
LiveData

可以找到它的文档。当然,你必须改变你的按钮点击监听器喜欢

btn_change_firstname.setOnClickListener {
    user.firstName.set("John")
}
其中firstName的声明类似于
val firstName:observeField

在这种情况下,android将观察字段本身的变化

另一种方法是子类化和调用。例如


这是预期的行为。将您的
firstName
/
lastName
包装到
observefield
中,或者开始使用
LiveData

可以找到它的文档。当然,你必须改变你的按钮点击监听器喜欢

btn_change_firstname.setOnClickListener {
    user.firstName.set("John")
}
其中firstName的声明类似于
val firstName:observeField

在这种情况下,android将观察字段本身的变化

另一种方法是子类化和调用。例如

在布局中添加

<TextView
android:text="@{user.firstName}" />

在布局中添加

<TextView
android:text="@{user.firstName}" />


我已经有了。我把它贴在这里不是为了让事情简短而甜蜜。那么你应该试试ObservaleField或LiveData,我已经有了。我在这里发布它并不是为了让事情简短而甜蜜。那么你应该试试ObservaleField或LiveDatas,这太可惜了。您可能会认为,如果它已经将textview绑定到一个类属性,那么它将能够在底层数据类成员发生更改时自动更新textview。我希望谷歌能增加这一功能。另一种方法是在设置新值后,将
BaseObservable
子类化,并调用
notifyPropertyChanged(int-fieldId)
。您可能会认为,如果它已经将textview绑定到一个类属性,那么它将能够在底层数据类成员发生更改时自动更新textview。我希望谷歌能增加这一功能。另一种方法是在设置新值后,将
BaseObservable
子类化,并调用
notifyPropertyChanged(int fieldId)