J'essaie de charger l'image avec une liaison de données. Mais je ne l'ai jamais fini. Où est mon problème? Vous trouverez ci-dessous mon code et ma construction.
ItemViewModel.kt
@BindingAdapter("imageUrl")
fun loadImage(view: RoundedImageView, url: String) = Glide.with(view.context).load(url).into(view)
layout.xml
<data>
<variable
name="viewModel"
type="com.myapp.app.ui.activity.albumlist.AlbumItemViewModel"/>
</data>
<com.makeramen.roundedimageview.RoundedImageView
Android:layout_width="60dp"
Android:id="@+id/ivRoundedAlbum"
Android:layout_marginStart="@dimen/unit_20_dp"
app:riv_corner_radius="8dp"
app:imageUrl="@{viewModel.data.cover}"
Android:layout_height="60dp"/>
Il serait plus pratique de créer un Adaptateur de liaison qui accepte plusieurs attributs optionnels afin que vous puissiez personnaliser la demande de chargement. Voici un exemple de cet adaptateur.
@BindingAdapter(
"srcUrl",
"circleCrop",
"placeholder",
requireAll = false // make the attributes optional
)
fun ImageView.bindSrcUrl(
url: String,
circleCrop: Boolean = false,
placeholder: Drawable?,
) = Glide.with(this).load(url).let { request ->
if (circleCrop) {
request.circleCrop()
}
if (placeholder != null) {
request.placeholder(placeholder)
}
request.into(this)
}
Et vous pouvez l'utiliser comme ceci:
<ImageView
...
app:srcUrl="@{someUrl}"
app:placeholder="@{@drawable/ic_placeholder}"
app:circleCrop="@{true}" />
Vous pouvez également trouver un exemple de sources de hibo - un officiel Android exemple d'application sur github. Voir BindAndAnapters.kt .