| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- DataBinding
- Kotlin
- Android Navigation
- 안드로이드 갤러리 접근
- 습관만들기
- Java
- 안드로이드
- MVP Architecture
- 영어공부
- 알고리즘 자바
- Android Interceptor
- Android WebView
- 코틀린 코루틴
- WebView
- 안드로이드 카카오 로그인
- OkHttp Interceptor
- Android 12 대응
- coroutine
- Android
- Kotlin FCM
- Android 12
- android recyclerview
- Android ProgressBar
- Android ViewPager2
- 카카오 알고리즘
- scope function
- Android Jetpack
- 프로그래머스 알고리즘
- 영어독립365
- 66챌린지
Archives
- Today
- Total
나미래 Android 개발자
[Android] Custom Binding Adapter 본문
Custom Binding Adapter
개요
- 커스텀 바인딩 어댑터를 이용하면 데이터를 바인딩 하기 전에 동작하는 로직을 추가할 수 있다.
- 일반적으로 커스텀 바인딩 어댑터는 Data Binding Library에서 제공하는 어댑터가 없는 경우 사용한다.
이번 글에서는 뷰의 Visibility, Load Image 그리고 Format String을 다루도록 한다.
활용 영상

프로젝트 셋팅
- CustomBindingAdapter 구현을 위해
kotlin-kapt를 아래와 같이build.gradle(Module)파일의 plugins에 추가한다. plugins { ... id 'kotlin-kapt' }- DataBinding사용을 위해
buildFeatures{ dataBinding true }를 아래와 같이build.gradle(Module)파일의 android{} 에 추가한다. android { ... buildFeatures{ dataBinding true } }- 아래와 같이 프로젝트에
MyBindingAdpater.ktObject 파일을 하나 생성한다.

CustomBindingAdapter 구현: View.visivility
일반 뷰의 `View.Visibility`를 관리하도록 한다.
Code in MyBindingAdpater.kt
@BindingAdapter("isVisible")
@JvmStatic
fun isVisible(view: View, isVisible: Boolean) {
view.isVisible = isVisible
}
ProgressBar in Layout
<ProgressBar
isVisible="@{isLoading}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
CustomBindingAdapter 구현: ImageView.load
이미지뷰에서 url값을 통해 이미지를 그리도록 한다.
단). url을 통해서 이미지를 로드하기 위해서는 coil-kt에서 제공하는 의존성을 추가해야한다.
Coli.load사용을 위해 implementation "io.coil-kt:coil:2.1.0"를 아래와 같이 build.gradle(Module) 파일의 dependencies{ } 에 추가한다.
dependencies {
...
implementation "io.coil-kt:coil:2.1.0"
}
Code in MyBindingAdpater.kt
@BindingAdapter("imageUrl")
@JvmStatic
fun loadImage(view: ImageView, url: String) {
view.load(url)
}
ImageView in Layout
<ImageView
android:id="@+id/imageView"
imageUrl="@{imageUrl}"
isVisible="@{!isLoading}"
android:layout_width="300dp"
android:layout_height="300dp"
...
/>
CustomBindingAdapter 구현: TextView.text
Code in MyBindingAdpater.kt
@BindingAdapter("price")
@JvmStatic
fun bindPrice(view: TextView, price: Int) {
view.text = "${price}원"
}
TextView in Layout
<TextView
isVisible="@{!isLoading}"
price="@{price}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
질문과 잘못된 점에 대해 말씀해주시는 건 언제나 환영입니다.
zero5.two4@gmail.com
'안드로이드 > Jetpack' 카테고리의 다른 글
| Navigation Basic Sample in Kotlin (0) | 2022.07.15 |
|---|---|
| [Android] Custom Binding Adapter Example in Kotlin (0) | 2022.07.05 |
| [Android] DataBinding 예제 (0) | 2022.06.29 |
| [Android] DataBinding 이란 (0) | 2022.06.26 |
| Databinding.executePendingBindings() (0) | 2022.06.07 |
Comments