android - 数据绑定(bind) - ObservableField<String> 不更新 View

标签 android android-databinding

我有一个简单的应用程序 - 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() 方法,并使namepublic。或者,让 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/

相关文章:

android - 71mb 添加到人行横道的应用程序大小

java - 如何更改API请求?

android - 如何使用 Android 数据绑定(bind)进行 for 循环?

java - 数据绑定(bind)事件监听器

android - 数据绑定(bind) RecyclerView : Cannot find the setter for attribute 'app:items'

android - 如何从 Android 的窗口管理器中删除多个 View ?

java - 不幸的是,该应用程序已停止工作 - android

添加文本时A​​ndroid ScrollView 自动滚动

android - 双向数据绑定(bind)android上编辑文本的布局错误

java - Kotlin 和数据绑定(bind) Int 值 null 检查问题