Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cours Développez votre première app. Android

Section: Accédez aux éléments interactifs depuis le code Java de ...

    2 août 2023 à 18:58:19

    Bonjour à tous.

    Je viens de débuter la dernière version de ce cours.
    À ce jour, je n'étais pas trop dans l'inconnu dans les nouvelles structures d'architectures de Google mais je suis maintenant dans une impasse parce que je ne peux pas me référencer à un modèle fonctionnel complet d'exemple de code.
    Il serait intéressant d'avoir ce modèle fonctionnel complet avec tous les fichiers nécessaires pour pouvoir analyser où le code ne fonctionne pas dans mon propre programme.

    J'ai très bien compris la notion de Fragments mais je suis complètement bloqué depuis 2 jours à la section 9 (Accédez aux éléments interactifs depuis le code Java de votre fragment),
    Dans cette section qui parle d'un nouveau concept que je ne connais pas: Binding, il n'y a pas de solutions à la fin de la section (il n'y a que des bouts de codes tout au long de la formation) pour que je puisse analyser les fichiers et surtout comprendre où mes parties de code ne fonctionnent pas.

    AndroidStudio me détecte des erreurs du genre (Field can be converted to a local variable ) et me propose des solutions qui n'ont pas rapport avec ceux qui sont expliquées dans le chapitre.

    Je tourne en rond et je suis perdu à ce niveau.
    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2023 à 14:33:01

      Bonjour,

      Je suis plus ou moins au même niveau que vous et cela ne compile pas.

      J'ai l'erreur "Cannot find symbol variable binding" et cette erreur est d'après Android Studio situé dans le fichier MainActivity.java au sein de la fonction onCreate.

      Perso, j'utilise "Android Studio Giraffe | 2022.3.1 Patch 4" sous Linux et je me demande si il n'y aurait pas une subtilité avec une version précédente.

      Quelqu'un aurai une idée?

      D'avance merci.

      Bàv.

      Thierry.

      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2024 à 12:22:40

        Bonjour à tous,

        Je suis au chapitre 17 et tout aussi coincé que vous. Les exemples de code ne sont qui plus est pas cohérents entre eux (noms de variables...), ils sont incomplets et il manque vraiment pas mal d'explications (classes manquantes quand on ajoute du code, ce genre de choses). Pour un cours considéré comme "facile"...

        Comme je suis arrivé un peu plus loin que vous je vais essayer de vous dépanner avec mes maigres connaissances. Quant à moi, je suis bloqué au niveau de l'affichage de la première question. Le code appelé par le onChanged() lors de la notification de currentQuestion ne fait rien. J'ai mis de la trace dans le logcat, le setText() se fait bien, avec la bonne valeur... mais l'affichage ne suit pas.

        @MarioC2, es-tu dépanné ? Ce que j'ai compris du binding :

        • Il faut bien interagir avec les éléments de ton interface graphique : changer le texte ou la couleur d'un bouton, récupérer la valeur d'un champ de saisie, etc.
        • Tu verras pas mal d'exemples anciens sur Internet avec des développeurs qui utilisent findViewById(). Pour éviter d'avoir à faire ça tout le temps, il y a le binding
        • Le binding est une classe java qui établit un lien entre ton code et l'interface graphique et plus précisément entre la classe Java associée à un fragment et les composants graphiques de ce fragment.
        • Quand tu as ajouté l'option dans le fichier build.gradle de ton application (les explications dans le cours sont claires à ce sujet), tu bénéficieras sans avoir à l'écrire d'une classe Java dérivant de la classe viewBinding et qui s'appelle un peu comme ton fragment. Si ton fragment s'appelle fragment_machin, la classe s'appelle FragmentMachinBinding.
        • Du coup peux déclarer ton binding comme l'un des membres de ta classe Java, quelque chose comme :
        public class QuizFragment extends Fragment {
          private FragmentQuizBinding binding;
        (...)
        • Avec ce membre, c'est plus simple d'interagir avec ton écran tu as juste à écrire :
        binding.

        et tu as tous les éléments de ton interface graphique, avec lesquels tu peux interagir pour les lire ou les modifier :

        Autocomplétion d'une classe binding associée à un fragment

        Etant donné l'âge de ta question j'ignore vraiment si tout cela te servira à quelque chose mais étant moi-même débutant en Android ça m'a permis de le reformuler et c'est toujours une bonne chose :)

        Bon courage.

        @thierryWillame4, es-tu dépanné ? Je pense que c'est un peu pareil as-tu déclaré le binding comme membre de la classe Java qui représente ton activité (MainActivity) ?

        Ca devrait ressembler plus ou moins à ça :

        public class MainActivity extends AppCompatActivity {
          private ActivityMainBinding appBinding;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        
            appBinding = ActivityMainBinding.inflate(getLayoutInflater());
            View appView = appBinding.getRoot();
            setContentView(appView);
          }
        }

         Attention, la classe ActivityMainBinding est déclarée automatiquement grâce à l'option du build.gradle de ton application mais il faut tout de même l'importer. Ctrl-ENTREE sur ActivityMainBinding te permettra d'ajouter à ton code automatiquement une ligne ressemblant à la ligne suivante :

        import com.example.tst_superquizz.databinding.ActivityMainBinding;


        Sachant que pour éviter que toutes mes variables s'appellent binding j'ai choisi de les appeler appBinding, viewBinding etc. ce qui m'oblige à m'adapter tout le temps avec les corrigés plus loin dans le cours, et ce n'est pas très confortable quand on débute. Je te conseille donc d'appeler plutôt le membre de ta classe MainActivity binding comme dans le cours. Bon courage

        Cordialement,
        Vincent

        -
        Edité par VincentHeintz 17 mars 2024 à 16:53:12

        • Partager sur Facebook
        • Partager sur Twitter
          5 avril 2024 à 15:07:00

          @VincentHeintz

          Merci beaucoup pour tes explications.

          J'ai repris le cours depuis le début et j'ai réussi à finir le chapitre qui m'empêchait de continuer.

          J'ai aussi pris la décision de renommer mes variables binding en appbinding et viewbinding. Je pense que ce sera plus simple pour la compréhension du code plus loin dans les châpitres.


          Bien à toi.
          Thierry.


          PS : Au 14/4 je suis au chapitre "Implémentez le Viewmodel de l'écran de Quiz'

          -
          Edité par ThierryWillame4 14 avril 2024 à 14:58:32

          • Partager sur Facebook
          • Partager sur Twitter

          Cours Développez votre première app. Android

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown