La databindig imageview bloquée ci-dessous se trouve mon adaptateur coustom et Imageview. Je réfère Voici [ Impossible de trouver le configurateur pour l'attribut avec le paramètre mais sans trouver de solution, quelqu'un peut-il aider, merci.
@BindingAdapter("app:image_url") fun loadImage(view: ImageView, logoUrl: String?) { if (logoUrl == null) { view.setImageResource(R.drawable.alert_dark_frame) } else { Picasso.with(view.getContext()) .load(logoUrl) .placeholder(R.mipmap.sym_def_app_icon) .into(view) } } <data> <import type="android.view.View" /> <variable name="abc" type="com.example.viewmodel.Result"/> </data> <ImageView android:id="@+id/circleImageView" android:layout_width="100dp" android:layout_height="100dp" app:image_url="@{abc.picture.thumbnail}" />
4 Réponses :
Il s'agit d'une erreur normale car la classe ImageView
ne contient pas de méthode setImageUrl
, vous devez donc faire une solution de contournement pour cela en créant une classe qui étend ImageView
et contient une méthode nommée setImageUrl
qui prend une String
comme paramètre et définit l'image à l'intérieur de cette méthode à l'aide de la bibliothèque Picasso
:
<com.yourPackage.MyImageView android:id="@+id/circleImageView" android:layout_width="100dp" android:layout_height="100dp" app:image_url="@{abc.picture.thumbnail}" />
et après cela, vous pouvez l'utiliser dans le xml comme ceci:
public class MyImageView extends ImageView { // ... here is the constructors public void setImageUrl(String url) { Picasso.get().load(url).into(this); } }
la seule façon que j'ai trouvée est d'utiliser picasso dans onBindViewHolderlike ci-dessous (je sais que ce n'est pas la bonne façon) Picasso.with (c) .load (holder.binding.abc !!. picture.medium) .placeholder (R.mipmap. ic_launcher) Cela résout mon problème pour temp. .into (holder.binding.circleImageView)
Je pensais que lorsque nous créons des attributs personnalisés pour des widgets, nous n'avons qu'à déclarer BindingAdapter ou InverseBindingAdapter. il semble que nous devions également étendre le widget lui-même en tant que classe et déclarer ces méthodes get / set?
Pouvez-vous essayer d'ajouter le plugin dans votre fichier build.gradle (app)
apply plugin: 'kotlin-kapt'
En utilisant cela, j'ai eu un problème dans les classes générées par liaison de données
Quel est le problème que vous rencontrez?
désolé pour la réponse tardive, j'obtiens cette erreur après avoir utilisé le plugin kotlin-kapt ActivityMain2Binding (DataBindingComponent _bindingComponent, View _root, ^ symbol: class DataBindingComponent location: class ActivityMain2Binding
J'ai un problème à ce sujet, et j'ajoute le plugin apply: 'kotlin-kapt' ceci dans mon build.gradle, fonctionne bien. avant d'ajouter cette ligne, cela ne génère même pas d'attr @BindingAdapter dans tout le projet.Merci beaucoup
Écrivez le code suivant dans la classe de modèle
<ImageView android:id="@+id/movie_image" android:layout_width="100dp" android:layout_height="100dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.027" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:image_url="@{movieList.component5()}"/>
En XML, écrivez le code suivant
companion object DataBindingAdapter { @BindingAdapter("bind:image_url") @JvmStatic fun loadImage(imageView: ImageView, image_url: String) { Picasso.get().load(image_url).fit() .placeholder(R.mipmap.ic_launcher) .error(R.mipmap.ic_launcher) .into(imageView) } }
Je viens de changer de
application: srcCompat
à
android: src
dans mon cas, lorsque je l'utilise avec la liaison de données. Fonctionne très bien maintenant. / pre>
NOUVEAU CODE
<androidx.appcompat.widget.AppCompatImageView android:layout_width="80dp" android:layout_height="80dp" android:textSize="16sp" android:fontFamily="@font/avenir_roman" android:textColor="@color/textColor" android:src="@{model.image}"/>
Cela fonctionne-t-il si vous supprimez
app:
de l'adaptateur de liaison?oui j'ai essayé mais ne fonctionne pas