RecyclerView の使い方。ドラッグ&ドロップで並び替え、スワイプで削除する。【Android】

2020年3月2日

RecyclerView の基本的な使い方を確認したので、備忘録として残しています。

ItemTouchHelper を使用して RecyclerView のアイテムをドラッグ&ドロップで並べ替え、スワイプで削除する方法についても確認しました。

試作品は以下のような感じです↓↓

RecyclerView で表示するアイテムには、複数のレイアウトを指定できます。

上記試作品でも、3種類のレイアウトファイルを使用しています。

  • TextView が2つあるレイアウト(ViewType1 の下にあるアイテム)
  • TextView が1つだけのレイアウト(ViewType2 の下にあるアイテム)
  • アイテムを区切るセクションタイトルのレイアウト(「ViewType1 」「ViewType2」 というテキストを表示しているアイテム)

上記試作品のソースコードは、GitHub にアップしています。

RecyclerView の基本

RecyclerView を使ってデータセットをリスト表示するためには、以下のクラスを実装します。

RecyclerView.Adapter


リスト表示したいデータセットを受け取り、リスト1行ごとのView (ViewHolder)を作成する役割を担うクラス。
行ごとに異なるレイアウトファイルを指定したりできる。

RecyclerView.ViewHolder


リストの1行として表示する View への参照を保持するクラス。
ViewHolder は Adapter で1行ごとに生成される。

RecyclerView.LayoutManager


RecyclerView に表示するアイテムの配置方法や、画面外に見えなくなったアイテムをどのように扱うかなどのポリシーを決定するクラス。
あらかじめ以下のようなサブクラスが提供されているので、基本的な用途ではこれらを使用することになる。

LinearLayoutManager ... 垂直または水平方向にアイテムを並べる場合に使用

GridLayoutManager ... アイテムをグリッド表示する場合に使用

StaggeredGridLayoutManager ... アイテムをスタッガードグリッド表示する場合に使用

RecyclerView まとめ
  1. Adapter によって RecyclerView に表示するデータを定義する
  2. RecyclerView の1行ごとの参照は、Adapter -> ViewHolder に保持されている
  3. RecyclerView のレイアウト(水平・垂直・グリッド表示など)は、LayoutManager によって管理される

レイアウトファイルの作成

RecyclerView を配置

RecyclerView のアイテム用のレイアウトを作成

試作品では3つのレイアウトファイルを作成しています。以下は1例になります。

Adapter の実装

RecyclerView に表示するデータとViewを結びつける Adapter を実装します。

アイテム行への参照を保持する ViewHolder も、Adapter の中で定義しています。

RecycerView の設定をする

RecyclerView に Adapter を渡したり、LayoutManager を設定したりします。

ドラッグ & ドロップ、スワイプでリスト操作をする

RecyclerView でドラッグ&ドロップやスワイプ操作を行うには、ItemTouchHelper クラスを利用します。

ItemTouchHelper


RecyclerView でドラッグ&ドロップやスワイプ機能を追加するためのクラス。Callback クラスと連携して、イベントを受け取り処理を行う。

ItemTouchHelper.Callback


ユーザがドラッグ&ドロップやスワイプ操作をした際にコールバックを受け取る。ItemTouchHelper クラスのコンストラクタに渡す必要がある。

ItemTouchHelper.SimpleCallback


ItemTouchHelper.Callback のサブクラスで、よりシンプルにドラッグ&ドロップやスワイプ時のイベント処理を記述できる。

(今回はこちらを利用しました。)

 

SimpleCallback を実装する

ItemTouchHelper のコンストラクタに渡す必要がある Callback を実装します。

ItemTouchHelper の設定

先ほどのMainActivityに処理を追加します。

おわりに

結構省略してソースコードをのせています。。。

全体像は GitHub の方で確認していただければと思います!!!

スポンサードリンク