Observable 인터페이스를 구현한 클래스는 데이터의 변화를 감지하기 위한 리스너를 등록할 수 있습니다. BaseObservable 클래스를 상속 받고, 리스너 등록을 통해 변경된 데이터를 알려주는 역할을 합니다. 아래의 코드가 위의 역할을 합니다.
class User : BaseObservable() {
@get:Bindable
var firstName: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.firstName)
}
@get:Bindable
var lastName: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.lastName)
}
}
위 코드에서, Data Binding에 사용되는 리소스의 ID들을 포함하고 있는 BR이라는 이름을 가진 클래스를 생성합니다. Bindable이라는 어노테이션은 컴파일 중에 BR 클래스에 있는 Entry를 생성합니다.
Lifecycle-aware objects
데이터 변경 시 UI에 자동으로 알려주기 위해 레이아웃과 바인딩을 한 후에는, 바인딩이 수명 주기를 알고 UI가 화면에 표시될 때에만 데이터 변경에 업데이트 됩니다. (StateFlow, LiveData)
[Android] Jetpack - Data Binding - 3
이전 포스팅에서는 Data Binding의 추가적인 기능에 대해 살펴보았습니다.
[Android] Jetpack - Data Binding - 2
이전 포스팅에서는 Data Binding에 대해 간략하게 살펴보았습니다. 표현식에서 콜백을 사용하면, 필요한 리스너를 자동생성한 후 이벤트에 등록합니다. UI에서 이벤트를 전달하면, 표현식을 검사하
weirddev.tistory.com
이번에는 Data Binding의 Observability에 대해 정리해보려고 합니다.
Observability
객체가 데이터의 변경 사항을 알리는 것 입니다.
최초 데이터가 UI에 바인딩 된 후 데이터가 변경되면 자동으로 UI를 업데이트 하게 할 수 있습니다.
Obsevable field
예시1) 변수 선언
예시2) ObservableField 변수 접근 및 업데이트
Observable collections
예시1) 변수 선언
예시2) XML에서 사용 선언
Observable objects
Observable 인터페이스를 구현한 클래스는 데이터의 변화를 감지하기 위한 리스너를 등록할 수 있습니다.
BaseObservable 클래스를 상속 받고, 리스너 등록을 통해 변경된 데이터를 알려주는 역할을 합니다. 아래의 코드가 위의 역할을 합니다.
위 코드에서, Data Binding에 사용되는 리소스의 ID들을 포함하고 있는 BR이라는 이름을 가진 클래스를 생성합니다.
Bindable이라는 어노테이션은 컴파일 중에 BR 클래스에 있는 Entry를 생성합니다.
Lifecycle-aware objects
데이터 변경 시 UI에 자동으로 알려주기 위해 레이아웃과 바인딩을 한 후에는, 바인딩이 수명 주기를 알고 UI가 화면에 표시될 때에만 데이터 변경에 업데이트 됩니다. (StateFlow, LiveData)
'DEV > Android' 카테고리의 다른 글