【问题标题】:Databinding - ObservableField<String> not updating view数据绑定 - ObservableField<String> 不更新视图
【发布时间】:2019-04-20 16:55:15
【问题描述】:

我有一个简单的应用程序 - 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();
}}

在 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}"”和“{”之间的这一行android:text="@{viewModel.name}" 中应该是“=”,但是当我添加它时,清理项目并重建它,我得到了无法解决 DataBindingComponent 的错误。

有什么想法吗?
提前致谢!

【问题讨论】:

    标签: android android-databinding


    【解决方案1】:

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

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

    据我阅读,我认为在 '@' 和 '{' 之间的这一行 android:text="@{viewModel.name}" 中应该是 '=',

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

    【讨论】:

    • 您的帖子应保存为文档的一部分,谢谢!我会在一秒钟内接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多