본문 바로가기

안드로이드

databinding의 Two-way Binding

안드로이드의 Two-way Binding을 살펴볼것이다.

 

우선 Two-way Binding 이 무엇인가? 개념적으로 보면 여태까지 적용시킨 데이터 바인딩은 

코틀린 파일에있는 변수들을 직접 xml에 가져다 붙여서 변수의 내용을 xml에 표시하는것이였다.

 

그렇다면xml 파일에서 즉 사용자가 view에서(ex. edittext) 같은거에서 작성하는것을 변수로 받아오는것을 databinding으로 할수 없는것인가? 이 부분이 Two-way Binding이다.

 

즉 사용자가 xml에 입력한데이터 들을 변수와 연결시켜놓으면 그 변수에 저절로 들어가게 만드는것이다. 물론 실시간으로 하려면 livedata를 곁들인 그런형태가 되어야 하지만 어쩃든 그렇다.

 

 

그래서 이것의 쓰임새를 생각해보면 MVVM에서 뷰와 뷰모델을 느슨하게 결합하는데 사용될수있겠다.

 

사용방법은 아주 간단하다.

 

사용자의 입력이 들어오는 editText 같은곳의 text속성 같은곳에서 기존의 표현식인 ="@{}" 이아닌

="@={} 이런식으로 선언해준다.

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{test.textWareHouse}"
            android:textSize="20sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.654" />

        <EditText
            android:id="@+id/edittext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="200dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:minHeight="48dp"
            android:text="@={test.textWareHouse}"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.497"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

 

뭐이런거 가능한거는 androidx.databinding.adapters 에 다양한 뷰에 대한 BindingAdapter가 선언되어있기에 가능하다.

 

그래서 이렇게 기본적으로 제공되는  Two-way Binding 을 위한 BindingAdapter는 다음과같다

필요할때 참고로 가서 사용해보자

 

https://developer.android.com/topic/libraries/data-binding/two-way?hl=ko 

 

양방향 데이터 결합  |  Android 개발자  |  Android Developers

양방향 데이터 결합 다음과 같이 단방향 데이터 결합을 사용하면 속성에 값을 설정하고 이 속성의 변경에 반응하는 리스너를 설정할 수 있습니다. 다음과 같이 양방향 데이터 결합은 이 프로세

developer.android.com

 

또한 필요하다면 직접 BindingAdapter를 커스텀해서 사용할수도있을것이다.

 

그것은 또 다른 복잡한 이야기인데 우선 기본적으로 제공되는것부터 사용해보자.

 

 

커스텀관련해서는 공식문서를 참고하자

위쪽에 적어놨던 링크가 공식문서이다 ㅎㅎ

 

커스텀에대한 대략적인 설명을 하자면

BindingAdapter와 별개로 InverseBindingAdapter 가 추가로 선언되어있는데 이속성은 Edittext를 예로들자면

setText가 호출된후 다음으로 호출되는 함수를 정의하는 속성인데 Two-way Binding을 사용할때 발생할수 있는 무한 루프를 방지하기 위한 장치이다.

 


 

 

출처: https://itandhumanities.tistory.com/39

 

Two-way Binding 사용법

개요 데이터 바인딩은 MVVM에서 없어서는 안되는 요소입니다. MVVM에서 뷰와 뷰모델을 느슨하게 결합하는데 데이터 바인딩이 반드시 필요하기 때문입니다. 반드시 뷰모델의 데이터와 결합한다기

itandhumanities.tistory.com

 

https://developer.android.com/topic/libraries/data-binding/two-way?hl=ko 

 

양방향 데이터 결합  |  Android 개발자  |  Android Developers

양방향 데이터 결합 다음과 같이 단방향 데이터 결합을 사용하면 속성에 값을 설정하고 이 속성의 변경에 반응하는 리스너를 설정할 수 있습니다. 다음과 같이 양방향 데이터 결합은 이 프로세

developer.android.com