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にはない仕組みなので、ちょっと戸惑いましたが、使えるようになるととても便利そうですね。


参考ページ

【Android】はじめてのDataBinding




この記事が気に入ったらサポートをしてみませんか?