Привязка данных - ObservableField <String> не обновляет представление

1

У меня есть простое приложение - 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.

Есть идеи?
Заранее спасибо!

Теги:
android-databinding

1 ответ

1
Лучший ответ

Удалите метод getName() и сделайте name public. Или, getName() возвращает name, а не name.get().

Система привязки данных должна работать напрямую с Observable. Прямо сейчас ваш Observable скрыт от привязки данных, поэтому привязка данных не может зарегистрировать наблюдателя и узнать, когда данные изменяются.

Насколько я читаю, я думаю, что должно быть '=' в этой строке android: text = "@{viewModel.name}" между '@' и '{',

Этот синтаксис (@={viewModel.name}) предназначен для двустороннего связывания данных. Поскольку пользователь не может вводить данные в TextView, здесь это не нужно.

  • 0
    Ваше сообщение должно быть сохранено как часть документации, спасибо! Я приму ваш ответ через секунду.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню