web-dev-qa-db-fra.com

Android Pourquoi utiliser executePendingBindings dans RecyclerView

J'ai utilisé récemment des liaisons de données et je suis tombé sur la méthode executePendingBindings. La documentation en montre peu et je ne comprends pas comment cela fonctionne ni quand l'utiliser.

Beaucoup de développeurs utilisent le executePendingBindings dans le rappel onBindViewHolder mais je ne vois aucune différence moi-même dans le recycleur lors de son utilisation ou non.

Quelqu'un peut-il expliquer pourquoi il est important de l'utiliser dans un recycleur ?? Merci

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {

            Customer customer= List.get(position).second;
            ((CustomerViewHolder)holder).binding.setCustomer (customer)

            ((CustomerViewHolder)holder).binding.executePendingBindings();


}
11
Nick

Faire quelques changements sur votre liaison ne signifie pas que cela aura un effet immédiat sur votre View. Changer les choses dans la liaison signifie que vous planifiez vraiment ces changements à appliquer dans un avenir proche. C'est pour de nombreuses raisons, les performances étant l'une d'entre elles.

Imaginez que vous ayez des expressions complexes dans vos xml. Vous ne voulez pas comprendre tout ce qui concerne les variables de liaison avant de les avoir toutes définies. Ce serait un gaspillage de ressources.

Vous pouvez en savoir plus à ce sujet dans la liaison générée Java classe elle-même. Je vous suggère de la lire.

Appeler executePendingBindings signifie que vous forcez essentiellement le framework à faire tout ce qu'il doit faire jusqu'à présent sur la liaison, juste au moment de l'appeler.

Vous n'avez pas à le faire dans votre adaptateur si votre cas ne l'exige pas. Certaines personnes le font pour être sûr que tout est correctement réglé sur un élément avant de continuer. Donc par exemple il n'y a aucun cas comme le onBind étant appelé à nouveau avant l'exécution de la précédente série de liaisons ... ou quelque chose de similaire ...


EDIT 1:

N'oubliez pas non plus que la planification de l'exécution des modifications (pour l'avenir le plus proche) est la chose qui vous permet de setVariables sur binding à partir de threads différents de UI thread . Parce que définir une variable ne touche pas le View lui-même.


EDIT 2:

La façon la plus simple de regarder les classes Java Java générées) est de:

  1. Naviguer -> Fichier

navigate-file

  1. Tapez le nom de votre fichier de liaison dans UpperCamelCase suivi de Binding (par exemple, si votre mise en page est activity_main, tapez ActivityMainBinding)

activity_main_binding

6
Bartek Lipinski

Il y a aussi une chose que je dois mentionner. Lorsque vous appelez executePendingBindings (), votre liste ne sera pas aussi fluide que sans cet appel. Becase executePendingBindings () fait les choses dans le thread d'interface utilisateur. Imaginez donc une liste avec 500 éléments. Et chaque fois que vous appelez cette méthode dans l'interface utilisateur. Vous obtiendrez "L'application fait peut-être trop de travail sur son thread principal".

2
Artyom Shalaev