DataBindingでハマった事
前置き
他の人のプログラムを参考にDataBinding使ってボタンのenableを管理しようとしていたが上手く行かずハマっていた。
その対処をメモ代わりに投稿します。
あくまでも個人の解釈によるメモなので、これを見て間違った認識をしていても当方では何の責任も負えません。
その辺りを注意してください。
やろうとしていた事
ButtonとEditTextが二つあるlayoutを作り,
DataBinding(ViewModel)を利用して二つあるEditTextの両方が空かどうか
でButtonのEnableを動的に変更しようとしてた。
原因
DataBindingを見様見真似で使っていた為、一方向DataBindingを利用していたため
EditTextの入力をViewModelで受け取れていなかった。
対処
一方向ではなく双方向DataBindingを使うように変更した事で
上手く想定通りの挙動になるようになった。
<EditText
・
・
android:text="@{viewmodel.hoge}"
/>
↓
//変更点はtext="@{を text="@={ に
<EditText
・
・
android:text="@={viewmodel.hoge}"
/>
一方向DataBindingとは
ざっくり言うと
一方向DataBindingを利用すると
xml側でバインディングを利用し属性値を設定することでJava/Kotlin側の変更した値を一々Setterを使わずとも表示の更新ができる。
また値だけでなくListenerもセットすることができる。
*詳しくは公式を見てください
双方向DataBindingとは
ざっくり言うと一方向DataBindingで属性値とリスナーを別々にセットする必要があったのを
一つにまとめxml(View)の変更とJava/Kotlin側での変更を一つの変数で共有できるようになる。
*詳しくは公式を見てください