名单 更改
这个密封接口描述了RealmListcollection可能发生的更改。
这些状态由特定的子类InitialList 、 UpdatedList和DeletedList 表示。 删除列表时,会发出一个空列表,而不是null
。
因此,可以通过多种方式使用变更:
// Variant 1: Switch on the sealed interface
person.addresses.asFlow()
.collect { listChange: ListChange<Address> ->
when(listChange) {
is InitialList -> setAddressesUIList(listChange.list)
is UpdatedList -> updateAddressesUIList(listChange) // Android RecyclerView knows how to animate ranges
is DeletedList -> deleteAddressesUIList()
}
}
// Variant 2: Just pass on the list
person.addresses.asFlow()
.collect { listChange: ListChange<Address> ->
handleChange(listChange.list)
}
内容已复制到剪贴板
更新列表时,会提供额外信息,描述相对于上一版本的变更。 此信息的格式可直接用于驱动RecyclerView
等用户界面组件上的动画。 为了访问此信息,必须将ListChange转换为相应的子类。
person.addresses.asFlow()
.collect { listChange: ListChange<Address> ->
when(listChange) {
is InitialList -> setList(listChange.list)
is UpdatedList -> { // Automatic cast to UpdatedList
updateList(
listChange.list,
listChange.deletionRanges,
listChange.insertionRanges,
listChange.changeRanges
)
}
is DeletedList -> deleteList()
}
}
内容已复制到剪贴板