Je travaille sur DataBinding
avec BindingAdapter
. Voici ma méthode personnalisée.
@BindingAdapter("{bind:fadevisible}")
public static void setFadeVisible(LinearLayout view, int visible) {
Log.e("Bindings", "setFadeVisible: ");
}
Et dans le fichier XML, je l’appelle comme
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:fadevisible="@{1}"/>
Mais c'est montrer une erreur
Erreur: L'exécution a échoué pour la tâche ': app: compileDebugJavaWithJavac' . Java.lang.RuntimeException: erreurs de liaison de données détectées . ****/data binding error **** msg: Impossible de trouver le séparateur pour l'attribut 'app: fadevisible' avec le type de paramètre int sur Android.widget.LinearLayout . fichier:\app\src\main\res-main\layout\activity_detail.xml loc: 236: 31 - 236: 54 ****\erreur de liaison de données ****
J'ai vérifié ceci et ce thread mais de toute façon cela ne m'aide pas, comme vous pouvez le voir, je passe int
de xml et dans BindingAdapter
également j'ai également mentionné LinearLayout
avec int
valeur.
Même si j’ai une autre méthode, où seuls les paramètres sont différents et qui fonctionne bien
@BindingAdapter({"bind:image_round"})
public static void loadRoundImage(ImageView imageView, String url)
Votre définition de @BindingAdapter
me semble un peu étrange
@BindingAdapter("{bind:fadevisible}")
Ce n'est pas pareil
@BindingAdapter({"bind:fadevisible"})
ou
@BindingAdapter("bind:fadevisible")
qui devrait fonctionner parfaitement bien.
Tu essayes
@BindingAdapter("bind:fadevisible")
J'ai eu ce problème avec la liaison à ImageView
et contrairement à votre cas, la définition de mon adaptateur de liaison était correcte mais le IDE continuait de me donner ce message d'erreur. Après avoir passé de nombreuses heures à rechercher la cause, je me suis dit que l'espace de noms que j'utilise dans le fichier de formatage xml
doit être exactement celui que j'ai déclaré dans @BindingAdapter
.
Donc, si mon xml est comme ci-dessous:
<ImageView
Android:id="@+id/logo"
Android:layout_width="32dp"
Android:layout_height="32dp"
Android:layout_alignParentRight="true"
Android:layout_marginRight="16dp"
Android:layout_marginTop="16dp"
app:image_url="@{item.logoUrl}"
/>
Ensuite, ma méthode de liaison devrait être comme ci-dessous:
@BindingAdapter({"app:image_url"})
public static void loadImage(ImageView view, String logoUrl) {
if (logoUrl == null) {
view.setImageResource(R.drawable.ic_place_holder);
} else {
Glide.with(getContext()).load(logoUrl).crossFade().into(view);
}
}
Notez que l'annotation de la méthode de liaison indique l'espace de nom qu'il contient, c'est-à-dire @BindingAdapter({"app:image_url"})
exactement tel qu'il est utilisé dans le fichier de formatage app:image_url="@{item.logoUrl}"
Donc, contrairement à ce qui est dit dans la plupart des tutoriels, n’utilisez pas @BindingAdapter({"bind:image_url"})
dans votre méthode de liaison et app:image_url="@{item.logoUrl}"
dans votre fichier xml
.