groupieを使ってみた

github.com

目的

RecyclerViewをそのままで使うとカスタムレイアウトをいい感じに利用したい時にViewHolderを宣言する必要があり、そこそこ面倒。

developer.android.com

他にもdatasource更新時の挙動管理でボイラープレートが増えがちだったり、デフォルト実装があればいいのに・・・と感じるメソッドがあったりで、昔は不満に思いながら開発していた。

そのような課題を解決するためのサードパーティライブラリがいくつかある。一つはgroupieで、もう一つがepoxy。

epoxyはairbnbがメンテしているライブラリで、databindingのサポートやカルーセル形式のViewの拡張をサポートしていたりでリッチなライブラリ。groupieより先に使ったこともあり、個人的に馴染みがある。前職で利用していた時に書いた記事 →

qiita.com

ところがDroidKaigiのリポジトリや世間の風潮を見ると、groupieというものがあってそちらのシェアが多いっぽいということが分かった。比較記事を見ている感じだと

  • epoxyは機能が豊富でリッチ
  • groupieはRecyclerViewのAdapterを入れ替えるだけで済むため導入が簡単

とのこと。確かにepoxyの機能を使いこなすほどの要件はそれほど多くない印象があり、自然とgroupieで良いやという人が増えてもおかしくはなさそう。

最近デファクトのライブラリは一通り触っておきたいなと思い始めたため、これも少しだけ手を動かして触れてみることにした。


サンプリコードは充実してる

exampleアプリを触った限り、結構色々できそう。スワイプでの要素削除だったり、ソートやpagingなど。ライブラリで抽象化はされてないかもしれないが、サンプルコード自体の実装が充実しているので、いざという時にどうにかできそう

ライブラリの導入でつまづく

https://github.com/lisawray/groupie/blob/bc3c799b8cbb08ddf5f450b8f9b62f84aff33a84/README.md

READMEの通りにgradleファイルを更新するとエラーになる。パスの指定が違ったみたい(DroidKaigiアプリのリポジトリを参考にした)

# OK
implementation "com.xwray:groupie:2.9.0"
implementation "com.xwray:groupie-databinding:2.9.0

# NG
implementation "com.github.lisawray.groupie:groupie:$groupie_version"
implementation "com.github.lisawray.groupie:groupie-viewbinding:$groupie_version" 

これを調べてる過程でメンテナ募集中みたいなコメントを見かけて、少し不安になった

com.xwray:groupie-viewbinding can't be resolved · Issue #333 · lisawray/groupie · GitHub

I am actually transitioning to a new career and would like this library to be able to continue without my hands-on help.

実装自体は簡単

専用のAdapterのインスタンスのitemとしてViewHolderの代わりのクラスを追加すればいいだけなので、理解しやすい構成で簡単に書けた。

  • モジュールの使い方はわかった
  • モジュールの分割方法のイメージはついた
  • データ更新のイメージはなんとなくできた
  • 実際にデータの差分更新までやると問題は発生しそうだけど、調べれば解決できる気がする

実際の所感としてはこんな感じで、利用する抵抗はなくなった。やってみてよかった

github.com


参考記事

https://qiita.com/takahirom/items/4125d7c871fad534d3c2