안드로이드의 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
또한 필요하다면 직접 BindingAdapter를 커스텀해서 사용할수도있을것이다.
그것은 또 다른 복잡한 이야기인데 우선 기본적으로 제공되는것부터 사용해보자.
커스텀관련해서는 공식문서를 참고하자
위쪽에 적어놨던 링크가 공식문서이다 ㅎㅎ
커스텀에대한 대략적인 설명을 하자면
BindingAdapter와 별개로 InverseBindingAdapter 가 추가로 선언되어있는데 이속성은 Edittext를 예로들자면
setText가 호출된후 다음으로 호출되는 함수를 정의하는 속성인데 Two-way Binding을 사용할때 발생할수 있는 무한 루프를 방지하기 위한 장치이다.
출처: https://itandhumanities.tistory.com/39
https://developer.android.com/topic/libraries/data-binding/two-way?hl=ko
'안드로이드' 카테고리의 다른 글
Glide 사용시 필요한기능 찾아놓은것 (0) | 2021.11.01 |
---|---|
DataBinding의 BindingAdapter (0) | 2021.11.01 |
리사이클러 뷰에 databinding적용해보기 (0) | 2021.11.01 |
디자인패턴의 전반 mvc,mvp,mvvm을 알아보자 (0) | 2021.10.19 |
data binding 과 live data 동시 적용해보자 (0) | 2021.10.14 |