android 데이터바인딩 활용(2) - Event연동

데이터바인딩 활용에서 Event 연동하는 법을 알아보도록 하겠습니다.

기존에 클릭이벤트를 연동 할때 어떻게 쓰셨나요?
btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                
            }
})

위와 같이 View 객체에 직접 이벤트를 만들어 주거나 라이브러리등을 사용하여
다양한 방법으로 구현 할수 있었는데요.

데이터바인딩을 활용하여 xml에서 함수를 직접 호출 할수 있습니다.


<data>
        <variable
            name="activity"
            type="kr.co.proj.test.swiperefreshsample.DataBindingActivity"/>

 </data>

가장 첫번째 해줄일은 xml에 data와 variable태그를 추가합니다.
<variable내에 있는 정보>
name : xml내에서 참조할 변수 이름
type : 참조할 클래스

public void btnClick(View view)
{
    Toast.makeText(this, "Btn Click", Toast.LENGTH_SHORT).show();
}
Activity에는 버튼 이벤트가 발생 하였을때 함수를 추가 합니다.

<Button
            android:id="@+id/btn"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="Click!"
            android:onClick="@{activity::btnClick}"
            />
버튼에 onClick이벤트를 연결해 줍니다.
variable에 선언한 name(activity)과 함수명(btnClick)을 통해 호출 합니다.
가운데 들어있는 '::'는 함수를 지정할때 사용합니다. (name.함수명 형식도 가능 하지만 deprecated된 관계로 현재는 이방식을 추천 한다고 합니다.)

이렇게 소스를 작성한후 버튼을 눌러보면 동작하지 않는 것을 알수 있습니다.

binding = DataBindingUtil.setContentView(this, R.layout.activity_data_binding);
binding.setActivity(this);
binding된 객체에 setActivity를 통해 실제 값을 셋팅해 주어야 완료가 됩니다.

기존에 제공 라이브러리등에서도 편하게 구현되던 부분이어서
다소 할일이 많이 생긴것 같지만 이벤트뿐만 아니라 기타 다른 값에 대한부분도 가능하니
여러모로 활용 가능할것 같습니다.

댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[앱 디자인] 디자인 가이드 만들기 - 아이폰

푸시기능과 GCM / APNS

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기

Android CardView의 각 속성 설명