일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- factory method
- 옵저버 패턴
- designPattern
- Functional Programming
- ㅓ
- 디자인패턴
- 함수형프로그래밍
- Observer Pattern
- 빌터패턴
- builderPattern
- 추상팩토리패턴
- El
- r
- Design Pattern
- 싱글톤
- Kotlin
- 디자인패턴 #
- F
- PrototypePattern
- 팩토리 메소드
- Abstract Factory
- 프로토타입 패턴
- 코틀린
- 추상 팩토리
- a
- Singleton
- ㅋㅁ
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Binding Method BindingAdapter 본문
이 글은 송유섭 (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 주석을 보면 자바의 기본값을 넘겨받는다.
'Android Jetpack Architecture > DataBinding' 카테고리의 다른 글
DataBinding Component 사용하기 (0) | 2020.08.07 |
---|---|
DataBinding 자동객체 전환 (0) | 2020.08.07 |
DataBinding 이벤트 처리하기 (0) | 2020.08.07 |
DataBinding 표현식 정리 (0) | 2020.08.07 |
데이터 바인딩(DataBinding) (0) | 2020.08.05 |