AndroidのRecyclerViewのMergeAdapterを使ってみる
注意:本記事はアルファ版ライブラリを使用しています。みなさんの製品で使用する場合は正式版リリース後をおすすめします。
MergeAdapterとは
recyclerview:1.2.0-alpha02
で追加されたRecyclerView
用のアダプタークラスです。複数のアダプターをひとつにまとめてくれます。同じような機能をもつアダプターを自作した方もいるのではないでしょうか。
複数セクションをもつリスト
よくある例として、リストの1行目はお知らせを表示し、2行目以降は記事をリスト表示するものを考えてみます(画像はGoogle Play)。

RecyclerView
にはアダプターを1つしかセットできないので、次のような実装をしていたと思います。
- リストに表示する要素を表すListItemクラスを作る。おしらせと記事のどちらが入っているかを判別するために、itemTypeプロパティをもたせる
- アダプターでは、itemTypeを見てViewHolderを作り分ける
- データの設定もitemTypeを見てがんばる
セクション数が増えると、さらに複雑なアダプタークラスを実装することになります。
この問題を解決してくれるのがMergeAdapterです。
使い方
build.gradle
の
dependencies
に次の行を追加します。こちらで最新バージョンを確認してください。
dependencies {
// 中略
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha02'
}
そして、RecyclerView
用のアダプターを複数作成します。例として、2セクションあるリストを想定してみます。
// ユーザー表示用のアダプター
class UserAdapter :
ListAdapter<User, UserAdapter.ViewHolder>(callbacks) {
// 実装は省略
}
// おすすめユーザー表示用のアダプター
class RecommendationAdapter :
ListAdapter<User, SuggestionAdapter.ViewHolder>(callbacks) {
// 実装は省略
}
最後にMergeAdapter
オブジェクトを作ります。引数はセクション毎のアダプターです。渡した順にリストに表示されます。おすすめユーザーのリストを表示してから、その他のユーザーを表示させたい場合は、次のようにします。
// セクション毎のアダプターを作る
val recommendationAdapter = RecommendationAdapter()
val userAdapter = UserAdapter()
// おすすめ - その他ユーザーの順
val adapter = MergeAdapter(recommendationAdapter, userAdapter)
// あとは普通のアダプターと同じようにセットするだけ
this.binding.recycler.adapter = adapter
実行すると、次のようにセクションごとに表示されているのが確認できました。

まとめ
MergeAdapter
の使い方を説明しました。「itemCountをうまく調整しながら、読み込み中を出す」みたいな職人芸から開放されるので、正式版がリリースされてから、使ってみてください。