결과 변경
이 봉인된 인터페이스는 쿼리 결과 collection에 발생할 수 있는 변경 사항을 설명합니다.
상태는 특정 하위 클래스 인 초기 결과 및 업데이트 된 결과로 표시됩니다.
따라서 변경 사항은 여러 가지 방법으로 사용할 수 있습니다.
// 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 구성 요소의 애니메이션을 구동하는 데 직접 피드될 수 있는 형식으로 지정됩니다. 이 정보에 액세스하려면 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
)
}
}
}
클립보드에 복사된 콘텐츠