結果 変更
このシード処理されたインターフェースは、クエリ結果のコレクションに発生する可能性のある変更を記述します。
状態は、特定のサブクラス、 InitialResultsとUpdatedResultsによって表されます。
したがって、変更はさまざまな方法で消費されます。
// Variant 1: Switch on the sealed interface
realm.query<Person>().asFlow()
.collect { resultsChange: ResultsChange<Person> ->
when(resultsChange) {
is InitialResults -> setUIResults(resultsChange.list)
is UpdatedResults -> updateUIResults(resultsChange) // Android RecyclerView knows how to animate ranges
}
}
// Variant 2: Just pass on the list
realm.query<Person>().asFlow()
.collect { resultsChange: ResultsChange<Person> ->
handleChange(resultsChange.list)
}
クリップボードにコピーされた内容
クエリ結果が変更された場合、以前のバージョンからの変更を説明する追加情報が提供されます。 この情報は、 RecyclerView
のような UI コンポーネントでアニメーションを実行するために直接フィードできる方法で形式されます。 この情報にアクセスするには、結果変更を適切なサブクラスにキャストする必要があります。
realm.query<Person>().asFlow()
.collect { resultsChange: ResultsChange<Person> ->
when(resultsChange) {
is InitialResults -> setList(resultsChange.list)
is UpdatedResults -> { // Automatic cast to UpdatedResults
updateResults(
resultsChange.list,
resultsChange.deletionRanges,
resultsChange.insertionRanges,
resultsChange.changeRanges
)
}
}
}
クリップボードにコピーされた内容