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

Android Discussion :

Code plus générique pour OnClick


Sujet :

Android

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut Code plus générique pour OnClick
    Salut à tous

    J'ai une activity avec 4 boutons (nombre susceptible d'évoluer plus tard) tous ces boutons sont attachés à un évènement Onclick qui est le même excepté un paramètres qui diffère. En gros chaque bouton ouvre la même dialog mais avec un titre différent.

    J'aimerais rendre le code du Onclick si possible plus générique afin de pouvoir ajouter d'autre bouton sans difficulté par la suite.

    J'ai résolu le problème pour l'attribution de l'événement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i = 0; i < NBBTN ; i++)
    {
    	Button button = (Button) findViewById(
    			getResources().getIdentifier("button"+(i+1), "id", this.getPackageName())
    	);
     
    	button.setOnClickListener(this);
    }
    mais pas pour le traitement de l'événement :

    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
    public void onClick(View v) 
    {
    	int camselected = -1;
     
    	switch(v.getId())
    	{
    		case R.id.button1:
    		{
    			this.num = 0;
    			this.test(this.num);
    			break;
    		}
     
    		case R.id.button2:
    		{
    			this.num = 1;
    			this.test(this.num);
    			break;
    		}
     
    		case R.id.button3:
    		{
    			this.num = 2;
    			this.test(this.num);
    			break;
    		}
     
    		case R.id.button4:
    		{
    			this.num = 3;
    			this.test(this.num);
    			break;
    		}
     
    	}
    }
    qui pour le moment m'oblige à rajouter un case à chaque bouton.
    Des astuces pour améliorer cette dernière partie ?

    merci
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    La technique la plus simple est de créer deux tableaux :
    - les identifiants
    - les boutons

    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
     
    int [] ids = new int [] { R.id.bouton1, R.id.bouton2, ....};
    Button [] boutons = new Button [ids.length];
     
    ...
    for (int i = 0 ; i < ids.length ; i++ ){
       boutons[i] = (Button) findViewById(ids[i]);
       boutons[i].setOnClickListener(this);
    }
     
    ...
    onClick(View v){
     int id = v.getId();
     for (int i = 0 ; i < ids.length ; i++ ){
       if(id == ids[i]){
         this.num = 0;
         this.test(i);
         break;
     
        }
     }
    }

  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
    Dans le XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       android:onClick="onButtonClick"
       android:tag="MyText"
    Dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       public void onButtonClick(View v)
       {
             test(v.getTag()); // <= v.getTag() sera la String "MyText" ....
       }
    Meme pas besoin de toucher aux listeners
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Merci pour vos réponses.

    Je vais opter pour la solution de Simonmarky. Bien que plus simple la solution proposée par nicroman me gène un peu du fait que je vais me retrouver avec des évènements dans le code et dans le xml. Pas top pour la maintenance
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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
    hummm... comme tu veux

    Enfin, la solution d'avoir de l'UI dans le code est pire à mon humble avis
    A chaque bouton ajouté, deux endroits à toucher (le XML pour le bouton, et le code pour la liste).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Enfin, la solution d'avoir de l'UI dans le code est pire à mon humble avis
    A chaque bouton ajouté, deux endroits à toucher (le XML pour le bouton, et le code pour la liste).
    De toute manière , il faudra à un moment donné faire du code au moins pour définir le contenu de OnClick. Donc je préfère tout regrouper au même endroit , un peu comme ce qu'on fait en javascript/html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    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
    Citation Envoyé par grunk Voir le message
    De toute manière , il faudra à un moment donné faire du code au moins pour définir le contenu de OnClick. Donc je préfère tout regrouper au même endroit , un peu comme ce qu'on fait en javascript/html
    Ben c'est le même pour tous les boutons le code n'est fait qu'une fois, apres on touche plus au java....
    Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void onLaunchClick(View v)
    {
        doLaunch(v.getTag());
    }
    Resources:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <layout>
       <button android:onClick="onLaunchClick" android:tag="bouton1"/>   
       <button android:onClick="onLaunchClick" android:tag="bouton2"/>
       <button android:onClick="onLaunchClick" android:tag="bouton3"/>
       <button android:onClick="onLaunchClick" android:tag="bouton4"/>
    </layout>
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Ben c'est le même pour tous les boutons le code
    Oui oui , j'ai bien compris , mais ça c'est dans le cas idéal où il n'ya que ces boutons , ce qui n'est pas mon cas car j'ai d'autre actions qui elles sont totalement indépendantes.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Comment rendre ce code plus "générique" ?
    Par Yann39 dans le forum jQuery
    Réponses: 14
    Dernier message: 10/11/2010, 10h42
  2. Quel est le moyen le plus approprié pour formuler un code
    Par medreg dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2010, 18h53
  3. Réponses: 2
    Dernier message: 26/05/2009, 09h58
  4. [MySQL] Code générique pour transférer directement un POST dans MySQL
    Par djudjublondin dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/08/2007, 19h33
  5. Réponses: 1
    Dernier message: 27/03/2007, 18h22

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