[TIL] DataBinding-1

Doodung·2021년 12월 6일
0

Android

목록 보기
7/9
post-thumbnail

네이버 테크콘 안드로이드

DataBinding의 기본

→ Java, MVVM과 많이 관련되어있다.

DataBinding이란?

화면을 구성할 때 XML 사용, Data/Logic은 Java, Kotlin 사용
데이터 바인딩이 Binding.java로 연결함. 이 코드는 빌드 타임때 생성

  1. Gradle 설정하기
  2. XML 상에서 layout 사용.
    -> 빌드 할 때 ActivityMainBinding이 생성된다.
  3. Activity/Fragment/View에서 연결

View에서 참조를 끊어야 한다.
XML 상단에 data로 변수를 선언한다. 이를 빌드하면 setModel이 생성된다(→ abstract로). Impl도 생성된다.
그러면 모델을 UI에 주입 가능할 수 있다. binding.setModel(...)

XML 상에서
android:text="@{model.title}" 는 → titleTextView.setText(model.title); 와 같다.

DataBinding 어떤 기준으로?

BindingAdapter, SetMethod(자동Setter), BindingMethod

1. SetMethod(자동setter)

만약 TextView에 android:enabled="@{true}"를 넣으면
ActivityMainBindingImpl.java에 this.title.setEnabled(true); 이 생성된다.

이것을 어떻게 사용할 수 있냐?

첫번째로 BindingAdapter 찾아보고 BindingMethod 찾아보고 없으면 SetMethod 찾아가는 방식으로 코드가 생성된다.
Setter가 없으면 그때 빌드 에러가 발생하게 된다.

2. BindingAdapter → 사용자 지정 setter

@BindingAdapter

첫번째 파라미터인 TextView에 대해 "naver"라는 XML Attribute를 정의하는데 Boolean Type의 값을 받을 수 있다.
public static으로 정의해야 한다.

DataBinding을 도와주는 Observable

Data나 Logic이 변경되었을때 XML에 알려주고 싶다. 이것을 도와주는게 Observable이다 (Livedata로도 가능하다.)

  • Observable은 인터페이스고, 내부의 두 함수는 콜백을 등록하고 해제하는 메소드이다.

  • abstract class OnPropertyChangedCallback은 옵저블이 관측하는 값이 변경되었다고 던져주는 것이다.

이것을 가지고 모델을 만들게 되면 변경을 바인딩 클래스쪽으로 전해주는 것이다.
구현하기엔 까다롭기 때문에 구글의 BaseObservable 사용한다.

이렇게 BaseObservable을 만들 수 있다.

  • BaseObservable을 상속
  • Getter/Setter 추가
  • Getter 위에는 Bindable 추가

빌드를 하면 BR이라는 클래스 안에 생성된다.

매번 정의해서 쓰기 어려우므로 구글에서 정의한 것을 사용한다.
ObservableBoolean, ObservableArraylist, ObservableByte, ObservableField등 ... ObservableField는 제네릭 타입이다.
정의해서 this.notifyChange()로 바인딩 클래스에 알려주면 값이 변경되는 것이다.

profile
반가워요!

0개의 댓글