오늘도 더 나은 코드를 작성하였습니까?

Binding Method BindingAdapter 본문

Android Jetpack Architecture/DataBinding

Binding Method BindingAdapter

hik14 2020. 8. 5. 15:23

이 글은 송유섭 (NAVER / 라이브 서비스 개발)님의 발표자료를 많이 참고하였습니다.

자동 메서드 선택

 

- 데이터 바인딩 라이브리러리는 자동으로 호환 가능한 매개변수 타입을 갖는 setXXX(arg) 메서드를 찾으려고 시도한다.

- View의 attribute의 이름과 타입이 메서드를 찾는 데 사용된다.

- 아래 예제를 보면 TextView의 enabled 속성의 boolean 타입을 통해 setEnable(Boolean value) 찾아 호출한다.

- 바인딩 표현식은 반드시 정확한 타입을 반환해야 되며 필요하다면 캐스팅을 해야 할 수도 있다.

 

 

 

- 자동으로 찾아줄 때 어떤 순서로 찾는 것인가?

 BindingAdapter -->  BindingMethod  -->  Set Method

 

BindingMethod

- View 의 일부 속성은 setter의 이름과 일치하지 않는다

- setter의 이름이 일치하지 않는 특성은 BindingMethods 주석을 통해 특성을 setter와 연결할 수 있음.

- @BindMethod 에노테이션을 사용하여 속성과 Setter 메소드를 연결할 수 있다.

 

아래와 같이 정의를 하면 xml 파일에서 ImageView 에서 android:bgColor 속성에 바인딩 표현식을 통한 값을 넣어주면

setBackgroundColor로 값을 전달하여 실행된다.

@BindingMethods({

    @BindingMethod(type = "android.widget.ImageView",
            attribute = "android:bgColor",
            method = "setBackgroundColor")

})
    <ImageView
            android:id="@+id/image_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:bgColor ="@{color}"
            android:src = "이미지 리소스"/>

 

BindingAdapter

 

- 개발자 지정 Setter 라 생각해주면 된다.

- 개발자가 지정한 로직이 적용될 수 있다. 

 

* 참고로 안드로이드 프레임워크 안에 있는 클래스들에 대한 속성들은

이미 생성된 @BindingkAdapter 에노 테이션을 가지고 있다. 위젯+BindingAdapter 클래스를 통해 확인 가능하다.

안드로이드 스튜디오에서 Ctrl +N 후 위젯+BindingAdapter를

 

- 간단한 BindingAdapter를 살펴보기.

 

 BindingAdapter 만들기. 

 에노 테이션 @bindingAdapter( value = {View 태그의 속성 이름 } )

 파라미터 (View view, 바인딩 표현식 리턴 값)

 아래 처리할 로직 { } 함수 본문

xml 파일을 빌드하면 자동 생성되는 XXXBinding 클래스에 해당 어댑터 메소드를 사용하는 코드가 생성된다.

 

기본적으로 바인딩 어댑터 메서드의 파라미터가 여러 개일 때 모두 있어야 한다. 

 

만약에 어뎁터를 실행시키기 위한 속성을 지정하지 않아서 없다면????

 

1. 아래와 같이 메서드 시그니처를 달리해서 오버 로딩을 하면 된다.

2. 또는 requireAll은 Default로 true지만 이것을 False로 만들어주면 된다

그럼 지정한 value를 통해 받지 못한 속성의 파라미터는 어떻게 처리되는가.

 

BindingAdapter 주석을 보면 자바의 기본값을 넘겨받는다.