Study Record

[안드로이드] binding Adapter (결합 어댑터) 본문

안드로이드

[안드로이드] binding Adapter (결합 어댑터)

초코초코초코 2023. 8. 10. 00:51
728x90

😶 binding Adapter 

binding Adapter 는 View 에 대한 정보가 담긴 XML 파일의 뷰의 속성(attribute) 을 직접 설정할 수 있게 도와주는 어노테이션된 메서드이다.

 

TextView 에서 볼 수 있는 android:text="Sample" 과 같은 속성을 설정하면 Android 시스템은 자동으로 속성 이름과 동일한 이름의 setter 를 찾는다.  android:text="Sample" 속성의 setter 는 setText() 메서드는 안드로이드 프레임워크가 제공하는 메서드이기 때문에 별도의 setter 를 정의하지 않아도 된다.

 

이것과 비슷하게 binding Adapter 로 원하는 기능을 하는 속성을 원하는 이름을 붙여 정의할 수 있다. 

 

binding Adapter 는 Data binding 라이브러리에 의해 제공된다.

 

 

😶 data binding 라이브러리 추가하기

build.gradle(Module) 파일에 data binding 을 추가한다.

android {
    ...
    buildFeatures {
        dataBinding true
    }
    ...
}

 

 

😶 binding Adapter 사용하기

@BindingAdapter 어노테이션의 파라미터로 속성 이름을 명시할 수 있다. 예시에서는 app:imageUrl 을 이름으로 가진 속성을 뜻한다. 첫 번째 파라미터로는 속성을 명시할 View 를 의미한다. ImageView 로 명시되어 있으니 ImageView 에서 사용할 수 있다. 두 번째 파라미터는 명시한 속성의 값을 받아온다. String? 타입이므로 문자열을 값으로 받는다.  

@BindingAdapter("imageUrl")
fun bindImage(imgView: ImageView, imgUrl: String?) {
    imgUrl?.let {
        val imgUri = it.toUri().buildUpon().scheme("https").build()
        imgView.load(imgUri){
            placeholder(R.drawable.loading_animation)
            error(R.drawable.ic_broken_image)
        }
    }
}

예시 코드에서는 이미지 URL 을 속성으로 받아 coil 라이브러리로 이미지를 로딩하는 작업을 수행한다. 

 

xml 파일에서 다음과 같이 사용할 수 있다. app:imageUrl="@{photoUrl}" 은 정의한 setter 함수인 bindImage 함수가 호출되며 imgUrl 파라미터로 photoUrl 값이 전달될 것이다. 

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="photoUrl"
            type="String" />
    </data>

    <ImageView
        android:id="@+id/mars_image"
        android:layout_width="wrap_content"
        android:layout_height="170dp"
        android:adjustViewBounds="true"
        app:imageUrl="@{photoUrl}" />
</layout>

 

 

 

 

결합 어댑터  |  Android 개발자  |  Android Developers

결합 어댑터 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 결합 어댑터는 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다. 한 가지 예로

developer.android.com

 

728x90