[Android] DataBinding - 2

HEETAE HEO·2022년 5월 1일
0

DataBinding

목록 보기
2/3
post-thumbnail

Click Event 처리

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은 이벤트가 발생할 때 실행되는 바인딩 표현식입니다. 메서드 참조와 유사하지만 임의의 데이터 바인딩 식을 실행할 수 있습니다.

Two-way Binding(양방향 바인딩)

사용자의 입력을 받기 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 Attributes

양방향 통신으로 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의 속성 부분도 제어가 가능합니다.

View References

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으로 알게되는 추가적인 자료가 있다면 해당 글의 시리즈를 늘려갈 계획이다.

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글