【Android】Groupieで画面のパーツを共通化する

【Android】Groupieで画面のパーツを共通化する

こんにちは、kiyokawaです。
一覧画面 -> 詳細画面 のようなよくある画面を開発するとき、RecyclerViewを利用しますよね。
しかし、RecyclerViewで異なるレイアウトを表示したい時、ViewTypeを利用してこのViewTypeならあのViewをinflateして…と色々実装する必要があって面倒ですね。
Groupieを使うと楽に実装できます。

はじめに

一つのRecyclerView内に複数の見た目のViewを表示する場合、ViewTypeを利用して対応するViewHolderを作って返却させて、Viewにセットするデータを変えてとやる必要がありAdapterが膨れたりボイラープレートが出てきたりで大変です。

Groupieを使うと、Adapter.update()にItemのリストを渡すだけで更新してくれます。

さらにDiffUtilを使って追加時や変更時に自動的にアニメーションもかけてくれます。

GitHub: https://github.com/lisawray/groupie

導入

build.gradleに記載する

RecyclerViewの用意

まずRecyclerViewを持つレイアウトを用意します

レイアウトを用意したらRecyclerViewにGroupAdapterをセットします

Itemを作成する

RecyclerViewに表示したいItemを作成します
今回はDataBindingを利用しているのでBindableItemを継承します

表示させる

作成したItemのリストを作り、Adapterのupdateに渡します
Kotlinの operator fun plusAssign がMutableCollectionの拡張関数として定義されているので見やすくかけていいですね

上記の記述だけでHeaderとBodyの2パターンを表示するRecyclerViewを簡単に構築できました!

おわりに

Groupieというライブラリを知ったのは去年のちょうど今頃で、DroidKaigiアプリの中から見つけたものでした。
オープンソースのプロジェクトのbuild.gradleを少し眺めてみるだけでも、自分の知らない便利なライブラリを知ることができます。
日々の開発をより快適にするために、GitHubに公開されているプロジェクトを眺めることを習慣化していきたいですね。