DataBinding은 단순히 레이아웃 파일에서 데이터를 설정하는 것이 일부분에 불과합니다.
클릭 이벤트 처리를 통해 최신데이터가 UI에 표시되도록 하는 코드에 대해 설명하겠습니다.
일단 MainViewModel을 만들어보겠습니다.
MainViewModel
fun onEmailChange(){
if(_userEmailLD.value.equals("test@gmail.com")){
_userEmailLD.value = "android@gmail.com"
}else{
_userEmailLD.value = "test@gmail.com"
}
}
이제 onClick에서 동작할 TextView를 만들어보겠습니다.
activity_main.xml
<TextView
android:id="@+id/text_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.userEmailLD}"
android:textColor="@color/black"
android:onClick="@{()->viewModel.onEmailChange()}"/>
android:onClick은 이벤트가 발생할 때 실행되는 바인딩 표현식입니다. 메서드 참조와 유사하지만 임의의 데이터 바인딩 식을 실행할 수 있습니다.
사용자의 입력을 받기 EditText 작성해야하는 xml이 있는데 단방향과 양방향 두가지를 보면서
비교해 보겠습니다.
단방향
//Main.xml
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" @{user.firstName} "
android:id="@+id/firstName" />
일반적으로 작성되는 단방향 통신의 xml 코드이다. 또는 afterTextChanged같은 리스너를 추가해 사용할 수 도 있겠지만 그것보다 더 효율적인 Two-way Binding을 사용하기 위해 다음과 같이 선언해 준다.
< EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" @={user.firstName} " />
다음 코드는 사용자가 입력할 때 업데이트 되므로 id가 필요가 없어 적을 이유가 없습니다.
양방향 통신으로 View 속성에도 액세스할 수 있다.
< CheckBox
android:id="@+id/showName"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
< TextView
android:text="@{user.firstName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility=" @{showName.checked ? View.VISIBLE: View.GONE} "
/>
위의 사용자의 이름을 보여주는 TextView는 showName이 Checked되어야지만 보일 것입니다.
이와 같이 DataBinding은 텍스트의 데이터만을 변경해주는 것이 아닌 View의 속성 부분도 제어가 가능합니다.
DataBinding의 또 다른 장점으로는 이벤트 핸들러 람다식에서 해당 ID로도 View를 참조할 수 있습니다. 바로 예시를 보겠습니다.
< EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/firstName"
android:text="@={user.firstName}" />
< CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onCheckedChanged=" @{()->handler.checked(firstName)} " />
DataBinding에 대해 조사하면 할수 록 안드로이드 개발에서의 필수적인 요소로 느껴지기 시작한다. Search로는 한계가 있겠지만은 DataBinding으로 알게되는 추가적인 자료가 있다면 해당 글의 시리즈를 늘려갈 계획이다.