Android

Airbnb Epoxyについて

投稿日:2019/04/27 更新日:

最近RecyclerViewを使うときにAirbnb製のEpoxyというライブラリを使っています。
素のRecyclerViewだと、データが特定の状態のときにレイアウトを変えたい場合、少しごちゃごちゃしてしまうのと、何よりボイラープレートみたいなものが多くなるのでなんとかしたいなーということでEpoxyを使いました。
Epoxyの他にはGroupieというライブラリもあり、こちらはDroidKaigi2018と2019のアプリにも使われているのでかなり参考になると思われます。

Epoxyを使うと以下のような利点があります。

  • EpoxyがAdapterを作ってくれるのでボイラープレートになりがちなAdapterを作らなくてもよい
  • RecyclerViewを差分で更新してくれる
  • レイアウトファイルを再利用しやすい
  • スクロールビューの代わりに使える

DataBindingを使っている場合でもEpoxyはDataBindingに対応しているので使えます。
その場合implementationにDataBinding用のライブラリを追加する必要があります。


def epoxy_version = "3.3.1"
implementation "com.airbnb.android:epoxy:$epoxy_version"
kapt "com.airbnb.android:epoxy-processor:$epoxy_version"
implementation "com.airbnb.android:epoxy-databinding:$epoxy_version"

あとプロジェクトのREADMEだけではなくWikiがしっかりと記載されているので読んでおくとすごいよいと思います。

RecyclerViewは主にリストに使われていると思うのですが、リストを表示するとき大体以下のような要件があると思います。
・リストが空だった場合は空用のビューを表示する
・リストの取得時はローディング
・リスト取得時にエラーが発生した場合はエラー用のビューを表示する
・正しく表示できた場合はリスト表示する
実際は、もっと細かい要件があったりすると思うのですが、よくある要件だと思います。
いろんな説明記事があるので詳しくはそちらをみていただけるとよりわかりやすいですが、RecyclerViewで表示するコンテンツは以下のように組み立てます。

データモデルの状態に応じて何を表示するかわかりやすいのではないかと思います。
(よくわからなかったらすいません。)

あとEpoxyは単なる従来のRecyclerViewのリスト表示だけではなく、Static Content・・・スクロールビューの代わり(多分・・・)にも使えるということが書かれています。
Epoxy: Airbnb’s View Architecture on Android
おそらくAirbnbの多くのAndroidアプリでEpoxyが使われてリスト表示だけではなく通常のコンテンツもRecyclerViewで動いているのではないかと思われます。
実際に自分もリスト表示以外で使っておりますが、すごい効果があります。
特に設定一覧みたいな同じようなレイアウトが続き、かつScrollViewでラップするような画面で非常に効果があります。
ScrollViewにすると縦にがなくなりレイアウトエディタが非常に扱いにくくなります。
Epoxyを使うと少なくともメインのレイアウトにはRecyclerViewだけが存在し、個々のアイテムは専用のレイアウトファイルに分割されます。

ちなみにAirbnbでは入力画面のようなEditTextを持ついわゆる双方向なビューが含まれる画面もEpoxyで作っているみたいです。
次回は入力フォームをEpoxyで作ってみたいと思います。

-Android

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

Airbnb Epoxyで入力フォームを作ってみる

Airbnb Epoxyについてはいろいろな記事があるので詳しく説明を省かせていただきますが、RecyclerViewを使いやすくしてくれるライブラリです。 今回はEpoxyを使ってRecyclerV …

Android ConstraintLayoutのお勉強

Androidはいろいろ難しいところがあるのですが画面にビューを表示するレイアウトも慣れないと難しいものがあると思っています。 自分だけかもしれませんが簡単なレイアウトだなーと思って実際に配置してみた …

Firebase Authenticationを設定する

先日、Firebaseプロジェクトを作成しアプリを追加しました。 Firebaseにプロジェクトを追加する手順 今回はFirebaseのAuthenticationを設定してみようと思います。 Fir …

Androidで端末にPushメッセージ(FCM)が届かない問題

今、自分が会社で作っているアプリはPush通知が届かないとサービスが成り立たない重要な通知となっております。 基本的にFirebase Cloud Messaging(FCM)を使っています。 定期的 …

IntelliJ IDEA(AndroidStudio)でもgit rebase squashできるよ!

普段開発しているとGitを使ってバージョン管理することが多いと思います。 その時によくローカルブランチを作って、変更をガンガンコミットしていきます。 ある程度実装してリモートブランチにマージする時に、 …