数据绑定-ObservableField <string>不更新视图

时间:2019-04-20 16:55:16

标签: android android-databinding

我有一个简单的应用程序-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的错误。

有什么想法吗?
预先感谢!

1 个答案:

答案 0 :(得分:1)

删除getName()方法,并将name设为public。或者,让getName()返回name,而不返回name.get()

数据绑定系统需要直接与Observable一起使用。现在,您的Observable已从数据绑定中隐藏,因此数据绑定无法注册观察者并知道数据何时更改。

  

据我所知,我认为这应该是'@'和'{'之间的android:text =“ @ {viewModel.name}”“

该语法(@={viewModel.name})用于双向数据绑定。由于用户无法将数据输入到TextView中,因此此处不需要。

相关问题