0

次のコードは、双方向バインディングアプローチでuser.firstNameEditTextを定義しています。Javaによる双方向データバインディング(プログラマチック)

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

2ウェイバインディングのアプローチにより、プログラムでJavaコードにEditTextuser.firstNameを設定する方法をとにかくあります。

たとえば、

editText.setTextbyTwoWay(user.fisrtName); 

P.S:私はEditTextJavaコードにプログラムによって作成された記述を忘れていました。だからこそのテキスト値をのJavaコードでEditTextと定義する必要があります。

+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(); 
関連する問題