web-dev-qa-db-fra.com

Où placer Android Méthode BindingAdapter?

Cela doit être la question la plus élémentaire, mais après une journée complète de lecture de tutoriels et de la documentation ici Je n'arrive pas à comprendre où mettre ces méthodes. Aucun des guides ne mentionne où cette chose est placée, il mentionne simplement d'utiliser l'annotation sur une méthode statique. Quelle méthode statique? Une méthode statique quelle que soit la classe? Qu'est-ce qu'une bonne pratique? créer une classe CustomBinding pour héberger toutes ces méthodes statiques?

Tant que j'ai la méthode a une annotation BindingAdapter et le premier paramètre est une vue, cela fonctionnera?

Je suppose que si le premier paramètre est de type View, je peux placer l'attribut de liaison sur n'importe quel type de vues et cela déclenchera la méthode? Donc, si j'ai une vue spécifique, par exemple EditText, cela signifie-t-il que la méthode n'est appelée que lorsque l'attribut se trouve dans une vue EditText du fichier de disposition?

26
chaser

Après avoir navigué sur Internet, j'ai finalement trouvé des informations de l'un des développeurs eux-mêmes. Je souhaite qu'ils auraient été plus clairs sur les bases de la documentation.

Citation :

Les adaptateurs de liaison sont des méthodes annotées dans n'importe quelle classe qui sont utilisées pour cela. En règle générale, vous organisez vos adaptateurs en classes [-a] en fonction du type de vue cible.

Cela signifie évidemment qu'au moment de la compilation, toutes les méthodes de n'importe quelle classe avec l'annotation BindingAdapter généreront le BindingAdapter.

23
chaser

Vous le placez dans votre classe de modèle.

Exemple:

XML:

    <data>

    <variable
        name="item"
        type="com.yourpackage.Model"/>
      </data>
         ......

           <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@{item.resId}"/>

Modèle:

public class Model {

@DrawableRes
private final int resId;

public Model(int resId) {
    this.resId = resId;
}

public int getResId() {
    return resId;
}

@BindingAdapter ("Android:src")
public static void setImageResource(ImageView imageView, int resource){
    imageView.setImageResource(resource);
}

}

3
Manza