Realm-Android-Adaptersを使うと、RecyclerViewとRealmをいい感じに連携させることができます。

まずはRealmとRealm-Android-AdaptersをAndroidのプロジェクトに追加します。

// app/build.gradle
apply plugin: 'realm-android'

dependencies {
// Realm Android Adapters
implementation 'io.realm:android-adapters:3.1.0'
}
// project/build.gradle
buildscript {
dependencies {
classpath "io.realm:realm-gradle-plugin:5.9.1"
}
}

次に、 RealmRecyclerViewAdapter を継承したViewAdapterを作ります。この例における RealmModel は、 RealmObject を継承しています。

class ViewAdapter(val list: OrderedRealmCollection<RealmModel>, autoUpdate: Boolean): RealmRecyclerViewAdapter<RealmModel, ViewHolder>(list, autoUpdate) {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_realm_model, parent, false)
return ViewHolder(view)
}

override fun getItemCount(): Int = list.size

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = list[position].text
}
}

最後に、 RecyclerView にアダプターを設定します。 autoUpdatetrue にしておくと、Realmのモデルが更新された時に RecyclerView も自動で更新されます。

recyclerView.apply {
adapter = ViewAdapter(
Realm.getDefaultInstance().where(RealmModel::class.java).findAll(),
true
)
}