Я внедрил новую привязку данных для Android, и после внедрения понял, что она не поддерживает двустороннюю привязку. Я попытался решить это вручную, но я изо всех сил стараюсь найти хорошее решение для использования при привязке к EditText. В моем макете у меня есть это представление:
<EditText
android:id="@+id/firstname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords|textNoSuggestions"
android:text="@{statement.firstName}"/>
В другом представлении также показаны результаты:
<TextView
style="@style/Text.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{statement.firstName}"/>
В моем фрагменте я создаю привязку следующим образом:
FragmentStatementPersonaliaBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_statement_personalia, container, false);
binding.setStatement(mCurrentStatement);
Это работает и помещает текущее значение firstName в EditText. Проблема заключается в том, как обновить модель при изменении текста. Я попробовал поставить OnTextChanged-listener на editText и обновить модель. Это создало цикл, убивающий мое приложение (обновление модели обновляет графический интерфейс, который вызывает textChanged times бесконечность). Затем я попытался только оповестить, когда произошли реальные изменения:
@Bindable
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
boolean changed = !TextUtils.equals(this.firstName, firstName);
this.firstName = firstName;
if(changed) {
notifyPropertyChanged(BR.firstName);
}
}
Это работало лучше, но каждый раз, когда я пишу письмо, графический интерфейс обновляется и по какой-то причине курсор редактирования перемещается в начало.
Любые предложения приветствуются