我有一个简单的应用程序 - Button
- 它从 rest api 和显示此数据的 TextView
获取数据。我正在使用 MVVM 架构模式。当 ViewModel 收到带有获取数据的回调时,我将其设置为一个 ObservableField。不幸的是,它不会更新屏幕上的文本,但每当我旋转设备时,屏幕上的数据都会更新。
好了,不多说了,我给你看代码:
View 模型
public class MyViewModel extends ViewModel{
private ObservableField<String> name = new ObservableField<>();
@Override
public void onListReceived(String username) {
super.onListReceived(list);
name.set(username);
}
public String getName() {
return name.get();
}}
在 XML 中:
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.name}"
tools:text="some text"/>
据我所知,我认为在 android:text="@{viewModel.name}"
这行中应该是 '@
' 之间的 '='和“{
”,但是当我添加它、清理项目并重建它时,我收到无法解析 DataBindingComponent
的错误。
有什么想法吗?
提前致谢!
最佳答案
删除getName()
方法,并使name
为public
。或者,让 getName()
返回 name
,而不是 name.get()
。
数据绑定(bind)系统需要直接与Observable
一起工作。现在,您的 Observable
对数据绑定(bind)是隐藏的,因此数据绑定(bind)无法注册观察者并知道数据何时更改。
As far as I read, I think it should be '=' in this line android:text="@{viewModel.name}" between '@' and '{',
该语法 (@={viewModel.name}
) 用于双向数据绑定(bind)。由于用户无法将数据输入到 TextView
中,因此此处不需要。
关于android - 数据绑定(bind) - ObservableField<String> 不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55775729/