일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Compose
- Dialog
- Coroutines
- CustomScrollView
- Kotlin
- textfield
- data
- LifeCycle
- Navigation
- 계측
- 앱
- 테스트
- viewmodel
- livedata
- drift
- TEST
- scroll
- intent
- binding
- Button
- tabbar
- appbar
- DART
- 앱바
- Flutter
- activity
- 안드로이드
- android
- ScrollView
- textview
- Today
- Total
Study Record
[안드로이드] binding Adapter (결합 어댑터) 본문
😶 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>
'안드로이드' 카테고리의 다른 글
[안드로이드] Room (database) 살펴보기 (ViewModel, Flow, ListAdapter, LiveData, Coroutines) (0) | 2023.08.19 |
---|---|
[안드로이드] RecyclerView ListAdapter 살펴보기 (0) | 2023.08.10 |
[안드로이드] Retrofit 살펴보기 (ViewModel, Moshi, coroutines) (0) | 2023.08.09 |
[안드로이드] SlidingPaneLayout 살펴보기 (0) | 2023.08.03 |
[안드로이드] 단위 테스트 참고사항 (0) | 2023.08.03 |