我有一个简单的应用程序-Button
-它从rest api和一个TextView
处获取数据,该数据用于显示数据。我正在使用 MVVM 体系结构模式。当 ViewModel 接收到具有提取的数据的回调时,我将其设置为ObservableField。不幸的是,它不会更新屏幕上的文本,但是每当我旋转设备时,屏幕上的设备数据就会被更新。
好的,足够多的讨论,我将向您展示代码:
ViewModel
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
的错误。
有什么想法吗?
预先感谢!
答案 0 :(得分:1)
删除getName()
方法,并将name
设为public
。或者,让getName()
返回name
,而不返回name.get()
。
数据绑定系统需要直接与Observable
一起使用。现在,您的Observable
已从数据绑定中隐藏,因此数据绑定无法注册观察者并知道数据何时更改。
据我所知,我认为这应该是'@'和'{'之间的android:text =“ @ {viewModel.name}”“
该语法(@={viewModel.name}
)用于双向数据绑定。由于用户无法将数据输入到TextView
中,因此此处不需要。