BindingAdapter
BindingAdapter는 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다.
액티비티 또는 레이아웃에서 원하는 속성이 없어 해당 기능을 처리할 수 없을 때 BindingAdapter을 사용하여 View의 속성 값을 커스터마이징할 수 있습니다.
결합 어댑터 | Android 개발자 | Android Developers
결합 어댑터 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 결합 어댑터는 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다. 한 가지 예로
developer.android.com
BindingAdapter 생성
BindingAdapter는 Java의 static 함수로 되어 있기 때문에 @JvmStatic 어노테이션을 붙여줘야 합니다.
확장 함수를 사용하면 @JvmStatic 어노테이션을 붙이지 않아도 되고, object로 감싸지 않아도 됩니다.
@BindingAdapter에서 value는 XML에서 사용하고 싶은 속성을 의미합니다.
다음은 Glide 라이브러리를 사용하여 ImageView에 이미지 URL을 연결시켜주는 BindingAdpater입니다.
object ImageBindingAdapter {
@JvmStatic
@BindingAdapter(value = ["imageUrl", "errorImage"])
fun setImageUrl(imageView: ImageView, imageUrl: String, errorImage: Drawable) {
Glide.with(imageView.context)
.load(imageUrl)
.error(errorImage)
.into(imageView)
}
}
// 코틀린 확장 함수 사용
@BindingAdapter(value = ["imageUrl", "errorImage"])
fun ImageView.setImageUrl(imageUrl: String, errorImage: Drawable) {
Glide.with(imageView.context)
.load(imageUrl)
.error(errorImage)
.into(this)
}
XML에 적용
imageUrl 속성의 값에 따라 ImageView의 이미지가 바뀌도록 BindingAdpater를 설정합니다.
<?xml version="1.0" encoding="utf-8"?>
<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="item"
type="com.example.databinding.model.Item" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/myImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:imageUrl="@{item.imageUrl}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Activity에 적용
item 객체에 무엇이 들어가느냐에 따라 ImageView의 이미지가 변경됩니다.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.item = ...
}
}
'안드로이드 > 활용' 카테고리의 다른 글
[Android] CountDownTimer 사용하기 (0) | 2023.10.11 |
---|---|
[Android] SMS Retriever API를 통해 SMS 자동으로 읽어오기 (0) | 2023.10.11 |
[Android] ML Kit를 사용하여 얼굴 인식 (0) | 2023.10.07 |
[Android] CameraX 사용하기 (0) | 2023.10.06 |
[Android] ExoPlayer 사용하기 (0) | 2023.10.05 |
BindingAdapter
BindingAdapter는 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다.
액티비티 또는 레이아웃에서 원하는 속성이 없어 해당 기능을 처리할 수 없을 때 BindingAdapter을 사용하여 View의 속성 값을 커스터마이징할 수 있습니다.
결합 어댑터 | Android 개발자 | Android Developers
결합 어댑터 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 결합 어댑터는 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다. 한 가지 예로
developer.android.com
BindingAdapter 생성
BindingAdapter는 Java의 static 함수로 되어 있기 때문에 @JvmStatic 어노테이션을 붙여줘야 합니다.
확장 함수를 사용하면 @JvmStatic 어노테이션을 붙이지 않아도 되고, object로 감싸지 않아도 됩니다.
@BindingAdapter에서 value는 XML에서 사용하고 싶은 속성을 의미합니다.
다음은 Glide 라이브러리를 사용하여 ImageView에 이미지 URL을 연결시켜주는 BindingAdpater입니다.
object ImageBindingAdapter { @JvmStatic @BindingAdapter(value = ["imageUrl", "errorImage"]) fun setImageUrl(imageView: ImageView, imageUrl: String, errorImage: Drawable) { Glide.with(imageView.context) .load(imageUrl) .error(errorImage) .into(imageView) } } // 코틀린 확장 함수 사용 @BindingAdapter(value = ["imageUrl", "errorImage"]) fun ImageView.setImageUrl(imageUrl: String, errorImage: Drawable) { Glide.with(imageView.context) .load(imageUrl) .error(errorImage) .into(this) }
XML에 적용
imageUrl 속성의 값에 따라 ImageView의 이미지가 바뀌도록 BindingAdpater를 설정합니다.
<?xml version="1.0" encoding="utf-8"?> <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="item" type="com.example.databinding.model.Item" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ImageView android:id="@+id/myImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:imageUrl="@{item.imageUrl}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
Activity에 적용
item 객체에 무엇이 들어가느냐에 따라 ImageView의 이미지가 변경됩니다.
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) binding.item = ... } }
'안드로이드 > 활용' 카테고리의 다른 글
[Android] CountDownTimer 사용하기 (0) | 2023.10.11 |
---|---|
[Android] SMS Retriever API를 통해 SMS 자동으로 읽어오기 (0) | 2023.10.11 |
[Android] ML Kit를 사용하여 얼굴 인식 (0) | 2023.10.07 |
[Android] CameraX 사용하기 (0) | 2023.10.06 |
[Android] ExoPlayer 사용하기 (0) | 2023.10.05 |