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

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

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

1 Ответ

2 голосов
/ 20 апреля 2019

Удалите метод getName() и сделайте name be public.Или getName() return name, а не name.get().

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

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

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

...