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 :

RadioButton d'un RadioGroup dans des layouts différents ?


Sujet :

Composants graphiques Android

  1. #1
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut RadioButton d'un RadioGroup dans des layouts différents ?
    Bonjour,

    J'ai une structure comme ceci :

    RELATIVELAYOUT
    * RadioButton
    * TextView
    * TextView

    RELATIVELAYOUT
    * RadioButton
    * TextView
    * TextView

    [...]
    Malheureusement, avec celle ci, rien n'empeche l'utilisateur de cocher plusieurs boutons radio.
    J'ai essayé d'encadrer tous mes RelativeLayout par un RadioGroup, mais ça ne fonctionne pas.

    Alors, je vous demande, si il existe un moyen de faire ça ou au moins une solution pour contourner ce problème.

    En gros, est il possible d'avoir des RadioButton de layouts différents mais de même RadioGroup, afin de restreindre le choix de l'utilisateur a 1 seul choix parmi les radiobutton.

    Merci à vous.

  2. #2
    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
    J'ai peur que n'étant pas le comportement "normal" des radio buttons, il faille coder soit même le truc....
    A savoir, de simples "boutons" (avec le style des radio-buttons).
    Et sur le changement d'état, modifier celui précédemment sélectionné "à la main".
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    Comme ceci tu veux dire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    private OnTouchListener touchListenerRouge7 = new View.OnTouchListener() {
    	    public boolean onTouch(View v, MotionEvent event) {
    	    	rouge7.setChecked(true);
    	        rouge8.setChecked(false);
    	        rouge9.setChecked(false);
    	        rouge10.setChecked(false);
    	        rouge11.setChecked(false);
    	        rouge12.setChecked(false);
    	        bleu7.setChecked(false);
    	        bleu8.setChecked(false);
    	        bleu9.setChecked(false);
    	        bleu10.setChecked(false);
    	        bleu11.setChecked(false);
    	        bleu12.setChecked(false);
    	        return onTouch(v, event);
    	    }
    	};
    C'est ce que j'ai commencé a faire.
    J'ai pas mal de boutons a gérer, ça va être sympa et pas du tout redondant...

    Merci pour ta réponse.

  4. #4
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    J'ai fait ça pour tout mes boutons.

    Par contre, lorsque je lance mon appli dans le Virtual Device, et que je clique sur l'un d'entre eux.
    Mon application s'arrête net avec le message suivant :
    the application has stopped unexpectedly. Please try again
    J'ai aucune idée d'ou ça vient?
    Est-ce que le Virtual Device gère les OnTouch?

    Mon code :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    		rouge7 = (RadioButton) findViewById(R.id.maillot_rouge7);
    		rouge8 = (RadioButton) findViewById(R.id.maillot_rouge8);
    		rouge9 = (RadioButton) findViewById(R.id.maillot_rouge9);
    		rouge10 = (RadioButton) findViewById(R.id.maillot_rouge10);
    		rouge11 = (RadioButton) findViewById(R.id.maillot_rouge11);
    		rouge12 = (RadioButton) findViewById(R.id.maillot_rouge12);
     
    		rouge7.setOnTouchListener(touchListenerRouge7);
    		rouge8.setOnTouchListener(touchListenerRouge8);
    		rouge9.setOnTouchListener(touchListenerRouge9);
    		rouge10.setOnTouchListener(touchListenerRouge10);
    		rouge11.setOnTouchListener(touchListenerRouge11);
    		rouge12.setOnTouchListener(touchListenerRouge12);
     
    	}

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Jéjé34 Voir le message
    C'est ce que j'ai commencé a faire.
    J'ai pas mal de boutons a gérer, ça va être sympa et pas du tout redondant...
    Tu pourrais mettre tous ces boutons dans un java.util.List, au moins, ou un java.util.Map, et ne faire qu'un seul écouteur qui fait le traitement, en fonctionnant par filtre (je ne connais pas le développement android, mais je suppose que, comme en swing, ou swt, on peut enregistrer plusieurs écouteurs d'évènement de même type sur un même composant graphique). En faisant une classe dédiée au comportement , tu auras un composant qui gère ça tout seul, et réutilisable.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    Salut,

    Je suis novice sur Android et je connais très peu les interfaces graphiques en Java pur (swing etc.).
    Mais merci pour l'idée. Je la creuserai une fois que j'aurai résolu mon problème, mais j'ai aucune idée d’où ça vient.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    La question est juste de savoir si on peut enregistrer plusieurs OnTouchListener sur un même RadioButton (le nom de la méthode commençant par set, et non add, me fait douter). Cela dit, si ce n'est pas le cas, il suffira d'ajouter à appel de méthode à tous les écouteurs déjà utilisés en passant l'instance du RadioButton touché. Un appel au lieu de (50), c'est toujours ça de gagné niveau duplication de code, surtout qu'ajouter ou enlever un nouveau bouton, ne concernera que le code de ce bouton (n'obligera pas de passer sur l'ensemble de tous les écouteurs).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    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
    Plusieurs remarques:
    1. En cas d'erreur, la première chose à faire est de regarder l'erreur en question ("application has stopped ..." veut dire qu'il y a eu une exception, et que celle ci est affichée dans le "logcat"). Nous envoyer le logcat serait bien sympa
    2. On n'utilise pas "onTouch" mais plutôt "onCheckedChange", cela permet de gérer le cas ou l'utilisateur vire son doigt du bouton avant de le relever.
    3. Ta méthode onTouch, se rappelle elle-même indéfiniment => crash par manque de "pile".


    Je pensais plutôt à un code comme celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public MyActivity extends Activity implements CompoundButton.OnCheckedChangeListener
    {
          public static enum Choice {
               Button1(R.id.button1),
               Button2(R.id.button2),
               ...
     
               private int res;
               private Choice(int r) { this.res = r; }
               public int getId() { return this.res; }
         }
     
     
         private Choice     currentChoice = Choice.Button1; // par défaut ?
     
         public void onCreate(Bundle savedInstanceState)
         {
               super.onCreate(savedInstanceState);
               setContentView(...);
     
               ... blah blah ... on récupère currentChoice...
     
               for (Choice c : Choice.values()) {
                    RadioButton rb = (RadioButton) findViewById(c.getId());
                    rb.setChecked(c == this.currentChoice);
                    rb.setOnCheckedChangeListener(this);
               }
          }
     
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
         {
               if (isChecked) {
                   int id = buttonView.getId();
                   for (Choice c  : Choice.values()) {
                      if (c.getId() == id) {
                            this.currentChoice = c;
                      } else {
                           RadioButton rb = (RadioButton) findViewById(c.getId());
                           rb.setChecked(false);
                      }
                   }
                }
          }
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. [C#][2.0] Sauvegarde d'un DataSet dans des threads différents
    Par Pilloutou dans le forum Framework .NET
    Réponses: 9
    Dernier message: 23/04/2007, 14h17
  2. Réponses: 6
    Dernier message: 01/04/2007, 20h13
  3. Comparaison de 2 tables se trouvant dans des db différentes.
    Par Empty_body dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/03/2007, 18h30
  4. Réponses: 1
    Dernier message: 27/06/2006, 13h09
  5. Comparaison de 2 dates dans des formats différents
    Par frdek dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/02/2005, 15h05

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