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

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

関連記事

ProGuardからR8への移行

AndroidStudio 3.4からコードシュリンカー・難読化にR8がデフォルトで使用されるようになりました。 自分が担当していアプリではProGuardは一般的な用途でしか使っていなかったのですが …

いつの間にかBottomNavigationにBadge機能がついていた・・・

先日、たまたまmaterial-components-androidのCatalogアプリを見ていたらBottomNavigationにBadge機能がついていました。 これ、最近追加されたんですかね …

既存アプリのレイアウトをConstraintLayoutに書き換えた

会社で作っているサービスのAndroidアプリにConstraintLayoutが未導入だったので多くの画面をConstraintLayoutで書き直しました。 アプリ自体が小規模から中規模で画面数は …

アサーションライブラリのGoogle Truthを使ってみる

AndroidXのTestではGoogleのアサーションライブラリのTruthが使われるみたいです。 Set up project for AndroidX Test Truthを必ず使えというよりも …

Android ConstraintLayoutのお勉強

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