web-dev-qa-db-fra.com

Comment DatabindInd Image Chargement avec GLIDE?

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"/>
10
Hasan Kucuk

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 .

1
Valeriy Katkov