[AAC] DataBinding 라이브러리

Yodi.Song·2020년 5월 13일
0

안드로이드

목록 보기
2/5

데이터바인딩 라이브러리
선언적 형식으로 레이아웃의 UI구성요소를 앱의 데이터 소스와 결합할 수 있는 support library이다.

사용 이유

Before

이 라이브러리를 사용하기 전에는 액티비티에서 UI 프레임워크 메소드들을 호출해서 레이아웃과 바인딩하는 방식이었다.

가령 아래 코드와 같이 findViewById()를 호출해 TextView 위젯을 찾아서 viewModel 변수의 userName 속성과 바인딩하는 과정을 거쳤다면

TextView textView = findViewById(R.id.sample_text);
    textView.setText(viewModel.getUserName());

After

데이터 바인딩 라이브러리를 사용하면 레이아웃 파일에서 직접 textView를 할당할 수 있으므로 엑티비티에서 자바/코틀린 코드로 따로 호출할 필요가 없다.

<TextView
        android:text="@{viewmodel.userName}" />
        

그리고 무엇보다 액티비티가 아니라 레이아웃에서 view를 바인딩하면 액티비티에서 빈번하게 이루어지던 UI 프레임워크 호출 (findById와 같은)을 하지 않아도 되니까 코드가 단순화되고 유지보수가 쉬워진다.
(메모리 누수 및 null pointer Exception 방지 가능)

이벤트 처리

1. 메서드 참조

 <CheckBox
            android:id="@+id/checkBox3"
            android:layout_width="102dp"
            android:layout_height="31dp"
            android:layout_marginTop="168dp"
            android:layout_marginEnd="8dp"
            android:onClick="@{activity::onCheckedBoxClicked}"
            android:text="CheckBox3"

            app:layout_constraintEnd_toStartOf="@+id/checkBox4"
            app:layout_constraintStart_toEndOf="@+id/checkBox2"
            app:layout_constraintTop_toBottomOf="@+id/radioGroup" />
            
   // checkBox check 여부 확인
    fun onCheckedBoxClicked(view : View) {

        var checked = view as CheckBox


        if (view.isChecked)
            checkedLog = checked.text.toString() + " 활성 "

        else
            checkedLog =  checked.text.toString() + " 비활성"

    }

2. 리스너 바인딩

나중에 사용할 일이 있으면 그때 정리

https://black-jin0427.tistory.com/134


덧)

Data binding과 View binding의 차이는?

DataBinding에서 View에 Data를 Binding 하는 기능을 제외한 View의 접근만 가능한 기능이 바로 ViewBinding

그냥 findByID() 기능만 한다고 볼 수 있다.

0개의 댓글