こんにちは、DataのBindingしてますか?
saikiです。
ということで今日はDataBindingに入門するためにコードラボをやってたんですが、割と重要なことを言っているような気がしたので前半の大事そうなとこを日本語で抜き出してみました。
英語不得意マンなので間違っている可能性は大いにありますのでご注意ください。
本家はここ。
目次
1. Introduction#
DataBindingLibralyはDataのUIへのBindをプログラムではなく宣言的にできるようにしてくれるよ。
staticなデータとobservableなデータ両方に使える。
observableなデータとはつまるところ、データが更新されるとUIも自動で更新されるということだよ。
データはViewModelから提供される。MVVMはDataBindingと相性のいいpresentation layou バターンだ。
もしAndroidArchitectureのViewModelをよく知らないなら公式のドキュメントをチェックしてくれ。official documentation
簡単にいうとactivityやfragmentにデータを供給するためのクラスで、回転しても死なずにacts as an interface to the rest of the layers in your app.(なんて言ってるかわかりませんでした、誰か教えてください)
2. Try out the app without Data Binding#
DataBindingを使っていないアプリにはいくつか問題がある。
- findViewByIdを何度も呼んでいるので遅い。その上conpile timeにチェックされないので安全じゃない。もし間違ったIDを渡していたらクラッシュするよね。
- onCreateでViewの初期化を行っている。自動でやってくれた方がいいよね。
- layoutでandroid:onClick属性を使っているからこれも安全じゃない。onLikeメソッドがActivityになければクラッシュするよね。
- コード量が多い。ActivityとFragmentはすぐ肥大化しがちだから出来るだけ外に移動させておきたいよね。あと、ActivityとFragmentのコードはテストもメンテナンスもしずらい。(全くである)
このすべての問題を解決できるよ。そう、DataBindingならね。(こんな描かれ方はしていない)ロジックをActivityの外側、再利用できてよりテストが簡単なところへ移動するのさ。(最高)
3. Enable Data Binding and convert the layout#
まずDataBindingを使いたいModuleでLibらlyをenableにするのを忘れないでね。
//build.gradle
android {
...
dataBinding {
enabled true
}
}
普通のレイアウトをデータバインディングレイアウトに変換するには以下の操作が必要だ:
AndroidStudioならoptoinエンターから簡単にlayoutタグを追加できる。
タグのなかにlayout variablesを置く。
layout variablesはlayout expression(レイアウト式)を書くのに使われる。
@{式}って感じで書けて、割となんでもできるくらい強いんだけどあんまり複雑すぎると他の人が意味わかんなくなるから勘弁してくれよな。
詳しい書き方はここをみよう
https://developer.android.com/topic/libraries/data-binding/expressions#expression_language
レッツバインディング!
4. Create your first layout expression#
タグの中にStringのlayout variables を定義してみよう。
stringならandroid:textにそのまま入れられる。
5. Change inflation and remove UI calls from activity#
onCreateのsetContentViewを以下のように変更する
val binding : PlainActivityBinding =
DataBindingUtil.setContentView(this, R.layout.plain_activity)
なぜ変数を作るのかというと、ブロックに定義したlayout variablesをセットするのに使うからだよ。
あとはただセットするだけ
binding.name = "Your name"
binding.lastName = "Your last name"
これでIDを探す処理を省ける。
=====================================
はいということでCodeLabo前半の大事そうなところだけでした。
ここからViewModel&LiveDataで使う話になります。
本筋って感じ。
ではまた。