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