일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Kotlin FCM
- 카카오 알고리즘
- Android 12 대응
- Android
- 영어독립365
- WebView
- 안드로이드 카카오 로그인
- android recyclerview
- Android ViewPager2
- 안드로이드 갤러리 접근
- 66챌린지
- DataBinding
- 알고리즘 자바
- Java
- Kotlin
- scope function
- Android Interceptor
- 영어공부
- Android Navigation
- Android DataBinding
- Android WebView
- Android 12
- 안드로이드 fcm
- 안드로이드
- Android ProgressBar
- MVP Architecture
- 습관만들기
- OkHttp Interceptor
- Android Jetpack
- 프로그래머스 알고리즘
Archives
- Today
- Total
Developer Geek
[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.kt
Object 파일을 하나 생성한다.
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