iOSエンジニアがAndroidアプリをリリースするまで6 〜DataBindingとLiveData〜
仕事ではiOSエンジニアとしてiOSアプリに携わっています。
先日、他のメンバーから「Androidエンジニアの募集要件を教えてほしい」と問い合わせがありました。
弊社、正社員のAndroidエンジニアがおらず、フリーランスにお願いしています。
そこで、Androidを担当するフリーランスに聞いたところいくつか回答がありましたが、その中に「DataBindingの理解」というのがありました。
その時は、ふ〜んくらいにしか思っていませんでした。
Androidアプリを自分で作り始めて、公式ドキュメントを見たり、何かをググった拍子に目に入っていたDataBinding。
そこで、Qiitaなどの記事を見ていたらレイアウトファイルとViewModelを繋げてくれるありがたい機構と理解できたので、使うことにしました。
DataBindingって何?
・レイアウトファイルとViewModelを紐つける
・レイアウトファイルの各Viewのプロパティ(TextViewのtextやSwitchのcheckedなど)とViewModelのLiveDataを紐つける
このいくつかの紐付けを行えばViewModelのプロパティを更新するだけでViewに反映されるということです。
LiveDataって何?
簡単にいうと、値の変更を通知する仕組みと理解しました。
レイアウトファイルにLiveDataを紐つけることで、変更を検知してViewに反映させていると思われます。
もう一つ、編み物カウンターでの使い方を紹介します。
入力内容のバリデーションでエラーが発生し、エラーメッセージをDialogで表示する。
このときにLiveDataを使いました。
まず、基本的な考え方です。
<Activityの責務>
・Viewのアクションの検知(setOnClickListenerなど)
・ViewModelでのバリデーション
<ViewModelの責務>
・ビジネスロジック(各種バリデーション)
また、データは一方通行にしたいというのがあります。
Activity ⇔ ViewModel はやりたくない。
要は、ActivityからViewModelの処理を呼び出すときに、返り値付きのメソッドを呼びたくありません。
Activity → ViewModel だけにしたい。
ViewModelの処理結果は、ViewModelの項目を観察(observe)/購読(subscribe)することでActivityで受け取ります。
この観察(observe)のところでLiveDataを使いました。
ViewModelでのバリデーション結果をLiveDataにセット。
ActivityではこのLiveDataを観察(observe)。
値が変わると通知されるので、通知された内容によって、Dialogを出したりといった感じです。
Rxっている?
RxJavaにBehaviorSubjectというものがあります。
値を持っていて、なおかつsubscribeすることでイベントを購読できます。
LiveDataとどう違うんだろう。。。
今のところ、編み物カウンターではLiveDataでどうにかなりそうです。
まとめ
今回は文章だけでなんだかわかりにくくなってしまいました。
ただ、コードを貼りだすとキリがないし、「概念的なお勉強になった」というところがメインなのでしょうがないかなと思います。
iOSにはない仕組みなので、ちょっと戸惑いましたが、使えるようになるととても便利そうですね。
参考ページ
この記事が気に入ったらサポートをしてみませんか?