结果 更改
这个密封接口描述了查询结果集合可能发生的更改。
这些状态由特定子类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
等用户界面组件上的动画。 为了访问此信息,必须将ResultsChange转换为适当的子类。
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
)
}
}
}
内容已复制到剪贴板