web-dev-qa-db-fra.com

Impossible de trouver le setter pour l'attribut avec le paramètre

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)
6
Ravi Rupareliya

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.

7
tynn

Tu essayes

 @BindingAdapter("bind:fadevisible")
4
Emre Aslan

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.

1
Merka