У меня есть простое приложение - Button
- которая извлекает данные из остальных 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()
возвращает name
, а не name.get()
.
Система привязки данных должна работать напрямую с Observable
. Прямо сейчас ваш Observable
скрыт от привязки данных, поэтому привязка данных не может зарегистрировать наблюдателя и узнать, когда данные изменяются.
Насколько я читаю, я думаю, что должно быть '=' в этой строке android: text = "@{viewModel.name}" между '@' и '{',
Этот синтаксис (@={viewModel.name}
) предназначен для двустороннего связывания данных. Поскольку пользователь не может вводить данные в TextView
, здесь это не нужно.