IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Boutons qui ne répondent plus


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut Boutons qui ne répondent plus
    Bonjour à tous !

    Je débute dans la programmation java et java pour Android. Je me suis lancé dans la programmation de ma première application pour joindre la pratique à la théorie. La théorie seule pouvant être un poil rébarbative...

    Voici mon problème :
    J'ai créé une classe A.java et 3 layouts xml (layout1, layout2 et layout3). Chaque layout contient 3 boutons et 2 textviews. Les layouts diffèrent par l'agencement et le contenu des textviews. Les boutons, quant à eux sont identiques (mêmes id).
    Dans ma classe A, j'ai déclaré mes boutons et textviews et je les ai récupéré via "findViewById". J'ai défini layout1 pour le lancement de l'activité.
    J'ai attribué un onClickListener à chacun des 3 boutons qui me change de layout et implémente mes textviews.
    Je lance l'activité...ok. Je clic sur bouton1...ok. Je clic sur bouton2...il ne se passe rien, bouton 3 idem. La seule chose qui fonctionne c'est le retour à la page précédente.

    -> Première question : pourquoi mes boutons ne répondent plus après le clic sur le bouton1 et le changement de layout ? Serait-ce parce qu'un bouton ne fonctionne que pour 1 layout donné ?

    Dans le doute, j'ai modifié les id de mes boutons (bouton1layout1, bouton2layout1, bouton1layout2, etc) et j'ai désormais 9 boutons que j'ai déclaré dans ma classe A.
    Maintenant, au lancement de mon activité, l'appli plante et me renvoie l'exception"NullPointerException" ciblée à la ligne du onClickListener du bouton1layout2.

    -> Deuxième question : cette erreur est-elle due au fait que je déclare un onClickListener sur un bouton appartenant à un layout qui n'est pas actif ? A la ligne précédente je récupère le bouton en question via "findViewById" mais ça ne me génère pas d'erreur, est-ce normal ?

    -> Dernière question : comment puis-je contourner ce problème ? J'avais éventualisé de créer de nouvelles activités qui seraient ciblées par mes boutons. Cette solution ne me convient pas trop car à l'avenir, le nombre de boutons va considérablement augmenter.

    Désolé pour ce roman, j'ai essayé d'être le plus synthétique possible.
    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Et si, avant chaque onClickListener, je plaçais un if (sans else) dont la condition serait le layout actif. Si le layout de la condition est celui qui est actif, on exécute le if sinon on l'ignore. C'est possible ?

    Si oui, comment formule-t-on la condition ?
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (contentView(actuel) = (R.layout.layout1))
    mais ça ne fonctionne pas...

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    findViewById retourne une "view" présente dans la fenêtre de l'activité. Si cette view n'est pas présente (cet ID plutot), "null" est retourné (lire la spec de la fonction)

    un "layout" n'est qu'un fichier XML permettant de construire une arborescence de Views (grace à un LayoutInflater) avec themes, et tout le tsintoin.

    Quand on fait "setContentView" dans une activité on *remplace* l'arborescence de views, par une nouvelle fraîchement construitre (par le LayoutInflater).
    On ne devrait appeler "setContentView" *que* une seule fois, au tout début du onCreate.

    Si besoin de changer de "view" pendant une activité, et si effectivement, c'est quelque chose de cohérent (n'y a-t-il pas plutôt changement d'activité ?), alors il vaut mieux utiliser les Fragment.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Je te remercie nicroman.
    Effectivement, je vais utiliser les fragments, c'est ce qui me parait le plus efficace.
    J'ai jamais utilisé ça, je vais creuser le sujet.

    Encore merci pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rotation d'écran - boutons qui ne réagissent plus
    Par kesakoo dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 24/06/2015, 14h37
  2. Des boutons qui ne répondent plus !
    Par Franck.H dans le forum jQuery
    Réponses: 9
    Dernier message: 20/06/2014, 08h35
  3. bouton disable qui ne fais plus le traitement
    Par krikete13 dans le forum JSF
    Réponses: 4
    Dernier message: 17/06/2007, 22h11
  4. Composants qui ne répondent plus au redimensionnement
    Par papadrago dans le forum Delphi
    Réponses: 6
    Dernier message: 02/04/2007, 01h06
  5. bouton actualiser qui ne marche plus
    Par DjBeGi dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo