Android Data Binding
Data Binding Library  |  Android Developers
what:
通常、UIの値を読み書きするには、xmlで作った(inflate)したviewの属性(textなど)にコード上で値を入れる.
これを、xml上の記述とcode上の変数を対応させる。Bindingする。
Android ViewModelもData Bindingさせると便利。viewModelを通じてUIを変更するのが定石なので。
Binding#viewModel = mViewModelみたいな形で layout全体とViewModelを関連付けられる
ObservableなViewModelにする...まだ分かってない #TODO
How:
1.app/build.gradleで、android{ dataBinding{ enabled = true } }
2. layoutファイルを、<layout><data><variable name=変数名 type=CLASSNAME>として、
配下のViewのtext属性などでその変数を参照する
3. Fragment, Activity
fragment上, onCeateView()で、binderでwrap?したrootのViewで返せばよい。
code: data_bingind.kt
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false)
return binding.root
Activityの場合は、従来のActivity#setContentViewの代わりに、DataBindingUtil.setContentViewを使う。
onClickで、イベントハンドラーを参照させることもできる
recyclerViewでは?
RecyclerView + DataBinding がちょっとややこしかった件 - 日々是好日
@BindingAdapterのannotationで、独自のbindingadaperができる?
bindingAdapterとは。この data binding. adapterパターンをしてる。
xmlの(view記述の)属性部分android:text="aaa" ここがbindingで、ここで独自?の (bindingした)属性を書ける
Custom attributes using BindingAdapters in Kotlin - ProAndroidDev
最初にイメージを掴む。
KotlinでAndroidの双方向DataBindingを利用する | RE:ENGINES
MVVM
実装対象のファイルはたったの3つです。とてもシンプルですが、DataBindingの概要を掴むには問題ないと思います。
activity_main.xml(View)
MainActivity.kt(View)
MainViewModel.kt(ViewModel)
class MainViewModel: BaseObservable() {
build errorがでた。
-> Android Studio Gradleのdebugを見る。
android: data binding error: cannot find symbol class - Stack Overflow
みんないろんなこといってる... 特定しにくいエラーなのか?
cannot find でsymbolが見つからない、みたいなエラーだった。
clean buildしてからもだめ、
com.mydomain.Model.Hoge みたいなパス名だったのを、
com.mydomain.model.Hoge みたいに modelと小文字にしたら、buildが通った...良くわからない
Data Binding — Lessons Learnt - Android Developers - Medium
Use the standard bindings when possible
make your custom binding adapters efficeint
maxLinesTOggle は便利そう。本題とはずれるけど。
Be careful with what you're providing as variables
So what can you do instead?
Small wins add up
#Android