본문 바로가기
Android

뷰 결합 FragmentBinding, 결합클래스의 개념

by leopard4 2023. 2. 23.

개념

findViewById를 대체하는 새로운 방식

뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성

모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성

결합클래스란 쉽게말해 XML과 JAVA코드를 하나로 묶은 클래스라는것

바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함됩니다.

 

설정

build.gradle에 다음을 입력

android {
        ...
        viewBinding {
            enabled = true
        }
    }

결합 클래스를 생성하는 동안 레이아웃 파일을 무시하려면 tools:viewBindingIgnore="true" 속성을

레이아웃 파일의 루트 뷰(메인액티비티XML을 의미한다)에 추가하세요.

<LinearLayout
            ...
            tools:viewBindingIgnore="true" >
        ...
    </LinearLayout>
    

메인액티비티XML상단

사용

모듈에 뷰 결합을 사용하도록 설정되면 모듈에 포함된 각 XML 레이아웃 파일의 결합 클래스가 생성됩니다.

각 결합 클래스에는 루트 뷰 및 ID가 있는 모든 뷰의 참조가 포함됩니다. 결합 클래스의 이름은 XML 파일의 이름을 카멜 표기법으로 변환하고 끝에 'Binding'을 추가하여 생성됩니다.

예를 들어 레이아웃 파일 이름이 result_profile.xml인 경우 다음과 같습니다.

<LinearLayout ... >
        <TextView android:id="@+id/name" />
        <ImageView android:cropToPadding="true" />
        <Button android:id="@+id/button"
            android:background="@drawable/rounded_button" />
    </LinearLayout>
    

생성된 결합 클래스 이름은 ResultProfileBinding이 됩니다. 이 클래스에는 name이라는 TextView와 button이라는 Button 등 두 필드가 있습니다. 레이아웃의 ImageView에는 ID가 없으므로 결합 클래스에 참조가 없습니다.

또한 모든 결합 클래스에는 상응하는 레이아웃 파일의 루트 뷰에 관한 직접 참조를 제공하는 getRoot() 메서드가 포함됩니다. 이 예에서는 ResultProfileBinding 클래스의 getRoot() 메서드가 LinearLayout 루트 뷰를 반환합니다.

다음 섹션에서는 생성된 결합 클래스를 활동 및 프래그먼트에서 사용하는 방법을 보여줍니다.

 

참조문서

https://developer.android.com/topic/libraries/view-binding?hl=ko