简体   繁体   English

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

[英]Databinding - ObservableField<String> not updating view

I have simple app - Button - which fetches data from rest api and a TextView where this data is displayed.我有一个简单的应用程序 - Button - 它从 rest api 和一个显示此数据的TextView获取数据。 I'm using MVVM architectural pattern.我正在使用MVVM架构模式。 When ViewModel receives callback with fetched data I set it up to an ObservableField.ViewModel收到带有获取数据的回调时,我将其设置为 ObservableField。 Unfortunately it doesn't update text on the screen, but whenever I rotate device data is being updated on the screen.不幸的是它不会更新屏幕上的文本,但是每当我旋转设备数据时都会在屏幕上更新。

OK, enough talking, I'll show you the code:好了,废话不多说,我给你看代码:

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();
}}

and in XML:并在 XML 中:

<TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{viewModel.name}"
        tools:text="some text"/>

As far as I read, I think it should be '=' in this line android:text="@{viewModel.name}" between ' @ ' and ' { ', but when I add it, clean project and rebuild this, I got an error that Cannot resolve DataBindingComponent .据我阅读,我认为它应该是 '=' 在这一行android:text="@{viewModel.name}"之间 ' @ ' 和 ' { ',但是当我添加它时,清理项目并重建它,我收到了无法解析DataBindingComponent的错误。

Any ideas?有任何想法吗?
Thanks in advance!提前致谢!

Remove the getName() method, and make name be public .删除getName()方法,并将name设为public Or, have getName() return name , not name.get() .或者,让getName()返回name ,而不是name.get()

The data binding system needs to be working directly with the Observable .数据绑定系统需要直接使用Observable Right now, your Observable is hidden from data binding, and so data binding has no way of registering an observer and knowing when the data changes.现在,您的Observable对数据绑定是隐藏的,因此数据绑定无法注册观察者并知道数据何时发生变化。

As far as I read, I think it should be '=' in this line android:text="@{viewModel.name}" between '@' and '{',据我所知,我认为它应该是 '=' 在这一行 android:text="@{viewModel.name}" 之间 '@' 和 '{',

That syntax ( @={viewModel.name} ) is for two-way data binding.该语法( @={viewModel.name} )用于双向数据绑定。 Since the user cannot enter data into a TextView , that is not needed here.由于用户无法在TextView输入数据,因此这里不需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ObservableField 的使用<string> Android 数据绑定中的字符串</string> - Usage of ObservableField<String> over String in Android Databinding DataBinding ObserableField <String> 没有更新视图 - DataBinding ObserableField<String> not updating the view 更改字符串的值而不更新android数据绑定中的视图 - Changing the value of a string not updating the view in android databinding 如何格式化ObservableField(double)DataBinding? - How to format an ObservableField (double) DataBinding? 数据绑定:自定义对象的ObservableField无法正常工作 - Databinding: ObservableField of custom object it is not working properly 如何改变 observableField 中的传入字符串 - How to mutate an incoming string in an observableField 如何处理警告:未经检查调用 &#39;ObservableField(T)&#39; 作为原始类型 &#39;android.databinding.ObservableField&#39; 的成员 - How to handle warning:Unchecked call to 'ObservableField(T)' as a member of raw type 'android.databinding.ObservableField' 使用ObservableField &lt;&gt;,set()的双向数据绑定不起作用? - 2-way databinding with ObservableField<>, set() doesn't work? 双向数据绑定(在xml中),ObservableField,BaseObservable,我应该用哪个双向数据绑定? - Two-way databinding(in xml), ObservableField, BaseObservable , which one I should use for the two-way databinding? 标识符必须具有XML文件中的用户定义类型,并带有observablefield的数据绑定 - Identifiers must have user defined types from the XML file, databinding with observablefield
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM