[TIL] DataBinding-2

Doodung·2021년 12월 6일
0

Android

목록 보기
8/9
post-thumbnail

Listener를 Binding 하는 법.

1. Object 연결

<Button
		android:onClick="@{model.clickListener}"/>

를 빌드하면

button.setOnClickListener(model.clickListener);

자동 setter가 아니라 BindingMethod로 연결된다.
@BindingMethod(type=view.class,attribute="android:onClick", method="setOnClickListener")
어노테이션이다. 뷰에 있는 메소드에 setOnClickListener를 연결시킨다 라는 정의.

이것 때문에 오브젝트가 연결된다.

2. Method 연결

<Button
		android:onClick="@{model::onClickButton}"/>
<Button
		android:onClick="@{(view) -> model.onClickButton(view)}"/>

이 식을 이용할려면 반드시

public void onClickButton(View button){
	//Do Something
}

이와 같이 정의를 해줘야 한다.

개발을 하다보면 이 메소드가 어떤 뷰에서 오는 것인지 식별할 수 있으면 뷰를 받지 않고 개발할 수 있다.
그렇게 한다면 이 방법은 사용 불가능하다.

<Button
		android:onClick="@{model::onClickButton}"/>

메소드 형식을 정확히 맞춰줄 때만 상단의 방식을 사용 할 수 있다. 람다 방식은 아래와 같이 변경해서 사용하면 된다. (정신건강에 항상 람다로 쓰는게 좋지 않을까...)

3. CustomListener의 Binding

커스텀 뷰를 만들어서 커스텀 리스너를 만드는 방식으로 바인딩을 처리할 수 있다.
바인딩 어댑터 정의하고 XML에 셋 하면 사용할 수 있다.

<..CustomTextView
		app:onCustomEvent="@{()->activity.onCustomEvent()}"/>

BindingMethod를 사용하면 다음과 같이 쓰면 된다

@BindinMethods({
		@BindingMethod(type=CustomTextVeiw.class,
        			attribute="onCustomEvent",
                    		method="setOnCustomEventListener")
})

public class SampleBindingAdapter {

주의해야 할 상황 -> 리턴값을 잘 맞춰주자

profile
반가워요!

0개의 댓글