0

Следующий код определяет user.firstName на EditText путем двустороннего связывания.Двунаправленная привязка данных в Java (программно)

<EditText android:text="@={user.firstName}" .../> 

Есть в любом случае, как установить user.firstName в EditText в Java кодекса программно два пути обязательного подхода.

Например,

editText.setTextbyTwoWay(user.fisrtName); 

P.S: Я забыл описать EditText создается программно в Java кодекса. Вот почему я должен определить Текстовое значение на это EditText в Java код для two-way binding.

+0

Модель наблюдателя может быть !? – NewUser

+4

Вы можете реализовать его с помощью 'ObservableField' –

+0

DataBinding используется для записи меньше кода в ваш java-файл, почему вы хотите реализовать двустороннюю привязку в java-коде? –

ответ

0

Вы можете сделать это в рамках обратных вызовов Observable.OnPropertyChangedCallback.onPropertyChanged() и TextWatcher.afterTextChanged(). Но это довольно обширная реализация и делает именно то, что будет сделано в привязках данных.

Итак, вы должны рассмотреть возможность использования привязок данных для представления, которое вы определяете программным путем. Определите как можно больше в макете, а затем раздуйте его привязками данных. Дальнейшая настройка может быть выполнена на завышенном виде.

<layout xmlns:android="http://schemas.android.com/apk/res/android> 
    <data> 
     <variable name="user" type="my.User" /> 
    </data> 
    <EditText 
     android:id="@+id/edit_text" 
     android:text="@={user.firstName}" 
     [...] /> 
</layout> 

Теперь вам нужно только добавить связывающий вид корня вместо EditText.

EditTextBinding binding = EditTextBinding.inflate(getLayoutInflater()); 
EditText editText = binding.editText; 
View viewToAdd = binding.getRoot();