목록 변경
이 봉인된 인터페이스는 RealmList collection에 발생할 수 있는 가능한 변경 사항을 설명합니다.
상태는 특정 하위 클래스 초기 목록, 업데이트 목록 및 삭제 목록 으로 표시됩니다. 목록이 삭제되면 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
과 같은 UI 구성 요소의 애니메이션을 구동하는 데 직접 피드될 수 있는 형식으로 지정됩니다. 이 정보에 액세스하려면 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()
}
}
클립보드에 복사된 콘텐츠