Mokelab Blog

AndroidのRecyclerViewのMergeAdapterを使ってみる

注意:本記事はアルファ版ライブラリを使用しています。みなさんの製品で使用する場合は正式版リリース後をおすすめします。

MergeAdapterとは

recyclerview:1.2.0-alpha02 で追加されたRecyclerView用のアダプタークラスです。複数のアダプターをひとつにまとめてくれます。同じような機能をもつアダプターを自作した方もいるのではないでしょうか。

複数セクションをもつリスト

よくある例として、リストの1行目はお知らせを表示し、2行目以降は記事をリスト表示するものを考えてみます(画像はGoogle Play)。

Google Playでの例

RecyclerViewにはアダプターを1つしかセットできないので、次のような実装をしていたと思います。

セクション数が増えると、さらに複雑なアダプタークラスを実装することになります。

この問題を解決してくれるのがMergeAdapterです。

使い方

build.gradledependencies に次の行を追加します。こちらで最新バージョンを確認してください。

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をうまく調整しながら、読み込み中を出す」みたいな職人芸から開放されるので、正式版がリリースされてから、使ってみてください。

本サイトではサービス向上のため、Google Analyticsを導入しています。分析にはCookieを利用しています。