绑定适配器负责进行适当的框架调用以设置值。
当您在应用程序中使用data binding 时,将值设置到您的views 中是很正常的事情。如下例:
<ProgressBar
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="@{viewmodel.loadingData?View.VISIBLE:View.GONE}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
但有时您想在设置方法中做一些特别的事情。例如,您的XML 中有一个RecyclerView,并且您想定义它的适配器,您可以通过在您的代码中为它定义一个bindingAdapter 来实现它。
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_main_articles"
app:adapter="@{viewmodel.articles}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_width="0dp"
android:layout_height="0dp"/>
绑定适配器主要有两种用法:
1- 对于 RecyclerView:
@JvmStatic
@BindingAdapter("app:adapter")
fun <T> setItems(recyclerView: RecyclerView, items: List<T>?) {
Log.d(TAG, "articles:[$items]")
if (recyclerView.adapter is HomeAdapter) {
if (items != null) {
(recyclerView.adapter as HomeAdapter).swapData(items)
}
}
}
2- 用于将图像加载到您的 ImageView(s)
@JvmStatic
@BindingAdapter("app:loadImage")
fun setImageResource(view: ImageView, imageUrl: String?) {
val context = view.context
val options = RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
imageUrl?.let {
Glide.with(context)
.setDefaultRequestOptions(options)
.load(imageUrl)
.transition(DrawableTransitionOptions.withCrossFade(1000))
.into(view)
}
}
更多信息:link