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

Dom*_*min 4 android android-databinding

我有一个简单的应用程序——Button它从 rest api 中获取数据以及TextView显示此数据的位置。我正在使用MVVM架构模式。当ViewModel收到带有获取数据的回调时,我将其设置为 ObservableField。不幸的是它不会更新屏幕上的文本,但是每当我旋转设备数据时都会在屏幕上更新。

好了,废话不多说,我给你看代码:

视图模型

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();
}}
Run Code Online (Sandbox Code Playgroud)

并在 XML 中:

<TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{viewModel.name}"
        tools:text="some text"/>
Run Code Online (Sandbox Code Playgroud)

据我所知,我认为android:text="@{viewModel.name}"在 ' @' 和 ' {'之间的这一行中它应该是 '=' ,但是当我添加它时,清理项目并重建它,我得到了一个无法解决的错误DataBindingComponent

有任何想法吗?
提前致谢!

Com*_*are 6

删除该getName()方法,并将name其设为public。或者,有getName()return name,没有name.get()

数据绑定系统需要直接使用Observable. 现在,您Observable对数据绑定是隐藏的,因此数据绑定无法注册观察者并知道数据何时发生变化。

据我所知,我认为它应该是 '=' 在这一行 android:text="@{viewModel.name}" 之间 '@' 和 '{',

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