Я внедрил новую привязку данных для Android, и после реализации понял, что она не поддерживает двустороннюю привязку. Я попытался решить это вручную, но я изо всех сил стараюсь найти хорошее решение для использования при привязке к EditText. В моем макете у меня есть этот вид:Создайте двустороннюю привязку с привязкой данных Android
<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);
}
}
Это работало лучше, но каждый раз, когда я пишу письмо, графический интерфейс обновляется и сома поэтому редактирование-курсор перемещается на фронт.
Любые предложения будут приветствоваться
Где находится ваш геттер. Вы добавили к нему аннотацию @ @ Bindable? –
Да. Добавлен геттер к описанию. – Gober
Вы всегда вызываете 'this.firstName = firstName', несмотря на то, что над ним находится boolean. Вы заглянули в эту логику? –