KotlinでRealm利用【RecycleView】

NO IMAGE

今回はRealmを用いたデータをRecycleviewで表示する方法です。

 

まずRecyclerViewが使えるようにライブラリを追加します。

build.gradleを開き以下のように書き加えます。

 

RecycleViewのレイアウトを追加します。

 

リストを表示する際の、セルのレイアウトを作成します。

それでは、MainActivityなどの表示したいところで

表示するための処理を書いていきます。

 

必要な内容は以下になります。

・Adapterクラスの作成(MyRecyclerViewAdapter.ktとします。)

・ViewHolderの作成。

・MainActivity内

→adapterのセット(必須)

→LayoutManagerの設定(必須)

 

 

・Adapterクラスの作成

では作成したMyRecyclerViewAdapterクラスのコードを順にみていきます。

まず引数のdataの型は

「 OrderedRealmCollection<Board> 」

となっています。

これはActivity側で一覧表示するために取得したRealmのBoardテーブルの

データコレクション(RealmResult)です。

 

このクラスは

RealmRecyclerViewAdapterを継承しています。

 

RecyclerViewではRealmResultをRecyclerViewで使用するために、

アダプタのベースを書いた、RealmRecyclerViewAdapterを継承して

オリジナルのアダプタを作成する必要があります。

 

 

(以下参考RealmRecyclerViewAdapter抽象クラス  gotoで見れます。)

 

 

ListViewからRecycleViewに変えて実装しようするとハマリがちかもしれません。

Realmはクエリ結果となるRealmResultをListViewで表示するためのアダプタとしてRealmBaseAdapterを用意していますが、これはListViewを使用する場合は問題ないですがRecyclerViewではこれを使用できないようになっています。
ちなみにこのクラスでは以下の三つの関数をoverrideして書かないといけないので、
・onCreateViewHolder
 (一つ分のViewHolderを作成する。ここでセルのレイアウト指定を行う)
・onBindViewHolder
   (作成したViewHolderにデータをセットする)
・getItemId
 (表示するアイテムの個数を返す必要がある。)

・ViewHolderの作成
このコードではわざわざ分ける必要もないと思ったので
ViewHolderを内部クラスとして実装していますが、
個別にクラスファイルを作っても大丈夫です。

レイアウトのidに対応したデータをビューホルダーに登録しています。
この辺の部分に関しては
こちらが図を用いて詳しく記述されていますので見るのをお勧めします!
・MainActivity内のセット
my_recycler_viewはRecycleViewのid名です。

最初のadapterの代入部分では、

RealmでBoardテーブルのデータを全て取得したもの(RealmResult)を引数にして、
MyRecyclerViewAdapterクラスのインスタンスを生成して代入しています。
それから、
LayoutManagerで表示の仕方をグリッドレイアウトやリニアーレイアウトから選んで、
adapterをセットすることで画面に表示されるようになります。。
(あらかじめデータを入れています。)
補足ですが、クラスの継承などで色々と下記のようなimportが必要に
なりますが、importされてなくてもエラーが出てる部分で、
Alt+Enterでimportが簡単にできるので省略しております。