web-dev-qa-db-fra.com

Android DataBinding où trouver le contexte?

J'ai TextView pour afficher l'heure. Je souhaite utiliser le plugin DataBinding d'Android.

Pour le formatage, j'utilise la méthode DateUtils.formatDateTime(context, int, int) qui prend l'instance Context. Est-il possible d'obtenir un élément d'inclusion de contexte? Ou dois-je utiliser la méthode old school?

Merci

40
bakua

J'ai pensé que je devrais répondre au lieu de mettre un commentaire. Vous aurez plus d'options à la sortie de rc2. Dans rc1, vous pouvez passer le contexte d'une variable à la liaison, puis le passer comme paramètre à la méthode. Vous pouvez également créer un attribut personnalisé pour la liaison de données:

@BindingAdapter({"timeMillis", "dateFlags"})
public static void setDateText(TextView view, int timeMillis, int dateFlags) {
    view.setText(DateUtils.formatDateTime(view.getContext(), timeMillis,
                 dateFlags));
}

Et puis utilisez-le dans votre TextView:

<TextView ... app:timeMillis="@{timeVar}" app:dateFlags="@{dateFlags}"/>
34
George Mount

Vous pouvez également faire quelque chose comme ça dans votre vue en utilisant la vue courante context comme paramètre.

...
Android:text="@{yourModelHere.yourModelMethodHere(context)}"
...
61
epool

Une variable spéciale nommée context est générée pour être utilisée dans les expressions de liaison selon les besoins. La valeur du contexte est le contexte de getContext () de la vue racine. La variable de contexte sera remplacée par une déclaration de variable explicite portant ce nom.

En d'autres termes, chaque fois que vous devez passer le contexte, utilisez simplement "context" comme dans @{Object.method(context)}.

8
Yoel Polanco