数据绑定 - ObservableField<String> 未更新视图
Databinding - ObservableField<String> not updating view
我有一个简单的应用程序 - 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
的错误。
有什么想法吗?
提前致谢!
删除getName()
方法,使name
成为public
。或者,有 getName()
return name
,而不是 name.get()
.
数据绑定系统需要直接与 Observable
一起工作。现在,您的 Observable
对数据绑定是隐藏的,因此数据绑定无法注册观察者并知道数据何时更改。
As far as I read, I think it should be '=' in this line android:text="@{viewModel.name}" between '@' and '{',
该语法 (@={viewModel.name}
) 用于双向数据绑定。由于用户无法将数据输入 TextView
,因此此处不需要。
我有一个简单的应用程序 - 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
的错误。
有什么想法吗?
提前致谢!
删除getName()
方法,使name
成为public
。或者,有 getName()
return name
,而不是 name.get()
.
数据绑定系统需要直接与 Observable
一起工作。现在,您的 Observable
对数据绑定是隐藏的,因此数据绑定无法注册观察者并知道数据何时更改。
As far as I read, I think it should be '=' in this line android:text="@{viewModel.name}" between '@' and '{',
该语法 (@={viewModel.name}
) 用于双向数据绑定。由于用户无法将数据输入 TextView
,因此此处不需要。