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 :

Modification du titre d'un AlertDialog


Sujet :

Android

  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Modification du titre d'un AlertDialog
    Bonjour à toutes et à tous,

    Je crée une boîte de dialogue dans laquelle j'installe plusieurs boutons et, lorsque j'appuie sur un bouton la méthode "listener" est déclenchée. Je voudrais, lors de cette action, modifier (entre autre) le titre de la boîte de dialogue. Pour ce faire j'ai l'instruction en ligne 14, mais après avoir essayé différents trucs, elle n'a aucune action.

    Est-il possible de modifier le titre d'une bîte de dialogue ouverte et si oui, comment fait-on ?

    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
    static void affPropRep (final int noRep) {
    	final AlertDialog.Builder propRep = new AlertDialog.Builder(context);
    	LinearLayout fntrPrinc = new LinearLayout(context);
     
    	final ImageButton[][] img = new ImageButton[6][4]; // Création d'un tableau pour 24 ImageButton
    		for (int j = 0; j < 4; j++)
    			for (int i = 0; i < 6; i++)
    				img[i][j] = new ImageButton(context); // Création des 24 ImageButton
     
    View.OnClickListener listener = new View.OnClickListener() { // Click sur un des ImageButton
        	@Override
        	public void onClick(View v) {
        		int noBtn = (Integer) v.getTag();
    		propRep.setTitle("Titre différent"); // Cette instruction n'a aucune action
    	}
        };
     
        int btnNum = 0;
        for (int j = 0; j < 4; j++) {
        	LinearLayout fntrSec04 = new LinearLayout(context);
    	for (int i = 0; i < 6; i++) {
        		img[i][j].setTag(Integer.valueOf(btnNum++));
    		img[i][j].setImageResource(iconRep[i][j].icone); //  Affectation d'une icône particulière
    		img[i][j].setOnClickListener(listener); // Affectation  du listener aux ImageButton
        		fntrSec04.addView(img[i][j]);
        	}
        	fntrPrinc.addView(FntrSec04);
        }		
    propRep.setView(fntrPrinc);
    	propRep.setTitle("\""+ptsRep[noRep].Nom+"\""); // Initialisation du titre de la boîte AlertDialog
    	propRep.setIcon(iconRep[ptsRep[noRep].colIcon][ptsRep[noRep].rowIcon].icone);
    	propRep.setPositiveButton("Valider", new DialogInterface.OnClickListener() {
    		public void onClick(DialogInterface dialog, int which) {
    		}
    	});
    	propRep.show();
    }
    Merci de votre aide.

    Pierre

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Ta variable propRep correspond au Builder d'une AlertDialog.
    Si tu veux modifier le titre d'une AlertDialog qui est déjà affichée, il faut interagir avec elle-même et non avec son Builder.

    De plus, je ne vois nulle part où le listener est utilisé. Il ne manquerait pas un bout de code ?

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par Simon MARQUIS Voir le message
    Ta variable propRep correspond au Builder d'une AlertDialog.
    Si tu veux modifier le titre d'une AlertDialog qui est déjà affichée, il faut interagir avec elle-même et non avec son Builder. ...
    Oui, mais comment a-ton accès au AlertDialog ?

    Citation Envoyé par Simon MARQUIS Voir le message
    ... De plus, je ne vois nulle part où le listener est utilisé. Il ne manquerait pas un bout de code ?
    Il est utilisé en ligne 24 pour chaque img créée.

    Merci de votre aide.

    Pierre

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Alors, plus simplement :
    L'objet AlertDialog.Builder est un constructeur et permet de configurer une AlertDialog.
    Pour pouvoir afficher cette AlertDialog, il faut "valider" la construction en appelant la méthode build() sur l'objet AlertDialog.Builder. Cette méthode va construire l'AlertDialog en fonction des paramètres que tu as définis.
    Ensuite, il te suffit d'appliquer la méthode show() sur l'AlertDialog.

    Pour résumer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AlertDialog.Builder builder = new AlertDialog.Builder().setTitle(...).setView(...) ;
    AlertDialog dialog = builder.build();
    dialog.show();

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci Simon MARQUIS pour cette réponse. Pour autant, je pense qu'on ne s'est pas compris, je me suis mal exprimé. Ce que tu me proposes, je l'ai fait et ma boite de dialogue est ouverte. C'est maintenant qu'elle est ouverte et qu'à l'aide de boutons que j'y ai installés, je veux modifier le titre.

    Merci de votre aide.

    Pierre

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Pour modifier le titre, il faut le faire depuis l'objet AlertDialog et non AlertDialog.Builder. En reprenant mon court example :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    AlertDialog.Builder builder = new AlertDialog.Builder().setTitle(...).setView(...) ;
    AlertDialog dialog = builder.build();
    dialog.show();
     
    //...
    //...
     
    dialog.setTitle("Nouveau titre");

  7. #7
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci pour ce morceau de code. Pour autant, cela ne fonctionne pas :

    • la méthode "build() n'existe pas pour la variable "builder". Je l'ai remplacée par la méthode "create();
    • si je fais "dialog.show()", l'écran s'assombrit et rien ne se passe,
    • si je fais "builder.show", alors la boîte de dialogue s'affiche, mais la méthode "dialog.setTitle("Nouveau titre");" n'a aucune action

    J'ai sûrement raté quelque chose ?

    Merci de votre aide.

    Pierre

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Oui en effet, la méthode build() dont je parlais n'existe pas, et il s'agit bien de la méthode create()...

    Peux-tu maintenant nous montrer ton code complet (de la création à l'affichage) ?

  9. #9
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Vici le code dont j'ai supprimé des instructions supplémentaires inutiles à la compréhension :

    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
    46
    47
    	static void affPropRep (final int noRep, final boolean nouvRep) {
    		final AlertDialog.Builder propRep = new AlertDialog.Builder(context);
    		LinearLayout fntrPrinc = new LinearLayout(context);
     
    		final ImageButton[][] img = new ImageButton[4][6]; // Création d'un tableau pour 24 ImageButton
    		for (int j = 0; j < 4; j++)
    			for (int i = 0; i < 6; i++)
    				Img[j][i] = new ImageButton(context); // Création des 24 ImageButton
     
        View.OnClickListener listener = new View.OnClickListener() { // Click sur un des ImageButton
        	@Override
        	public void onClick(View v) {
        		noBtn = (Integer) v.getTag();
         		for (int j = 0; j < 4; j++)
        			for (int i = 0; i < 6; i++)
        				if (6*j+i == noBtn)
        					img[j][i].setAlpha(1f); // Mise en surbrillance par rapport au autres
        				else
        					img[j][i].setAlpha(0.2f); // Mise en surbrillance par rapport au autres
    			propRep.setTitre("Un autre titre");
        	}
        };
     
        int btnNum = 0;
        for (int j = 0; j < 4; j++) {
        	LinearLayout FntrSec04 = new LinearLayout(context);
    	for (int i = 0; i < 6; i++) {
        		img[j][i].setTag(Integer.valueOf(btnNum++));
    		img[j][i].setImageResource(R.drawable.marcheur32);
        		img[j][i].setOnClickListener(listener); // Affectation  du listener aux ImageButton
        		FntrSec04.addView(img[j][i]);
        	}
        	fntrPrinc.addView(FntrSec04);
        }		
     
    		propRep.setView(fntrPrinc);
    		propRep.setTitle("\""+ptsRep[noRep].nom+"\"");
    		propRep.setPositiveButton("Valider", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int which) {
    			}
    		});
    		propRep.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int which) {
    			}
    		});
    		propRep.show();
    	}
    Ici, la ligne 20 n'a aucune action, le titre n'est pas modifié. J'ai modifié ce code selon ce que tu m'as dit de faire, mais je n'ai jamais réussi à changer le titre. Peut-être ai-je mal compris ce qu'il fallait faire ???

    Cordialement.

    Pierre

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur Java / C++
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java / C++

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Bonsoir ChPr,

    Je pense que cela vient du fait que "propRep" est toujours de type AlertDialog.Builder. Il faudrait qu'il soit de type AlertDialog comme te l'as indiqué Simon Marquis.

    Bonne soirée

  11. #11
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Minicalion, j'ai essayé, comme me l'a dit Simon MARQUIS, mais je n'ai pas réussi. Merci de votre aide.

    Pierre

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Voici ma solution :
    Je ne l'ai pas testée mais je pense qu'elle doit fonctionner.
    Il faut que tu créés un objet AlertDialog, et que tu l'utilises.

    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
    46
    47
    48
    49
    50
    51
    	AlertDialog dialog = null;
     
    	static void affPropRep (final int noRep, final boolean nouvRep) {
    		final AlertDialog.Builder propRep = new AlertDialog.Builder(context);
    		LinearLayout fntrPrinc = new LinearLayout(context);
     
    		final ImageButton[][] img = new ImageButton[4][6]; // Création d'un tableau pour 24 ImageButton
    		for (int j = 0; j < 4; j++)
    			for (int i = 0; i < 6; i++)
    				Img[j][i] = new ImageButton(context); // Création des 24 ImageButton
     
    	    View.OnClickListener listener = new View.OnClickListener() { // Click sur un des ImageButton
    	    	@Override
    	    	public void onClick(View v) {
    	    		noBtn = (Integer) v.getTag();
    	     		for (int j = 0; j < 4; j++)
    	    			for (int i = 0; i < 6; i++)
    	    				if (6*j+i == noBtn)
    	    					img[j][i].setAlpha(1f); // Mise en surbrillance par rapport au autres
    	    				else
    	    					img[j][i].setAlpha(0.2f); // Mise en surbrillance par rapport au autres
    				if(dialog != null)
    					dialog.setTitre("Un autre titre");
    	    	}
    	    };
     
    	    int btnNum = 0;
    	    for (int j = 0; j < 4; j++) {
    	    	LinearLayout FntrSec04 = new LinearLayout(context);
    		for (int i = 0; i < 6; i++) {
    	    		img[j][i].setTag(Integer.valueOf(btnNum++));
    			img[j][i].setImageResource(R.drawable.marcheur32);
    	    		img[j][i].setOnClickListener(listener); // Affectation  du listener aux ImageButton
    	    		FntrSec04.addView(img[j][i]);
    	    	}
    	    	fntrPrinc.addView(FntrSec04);
    	    }
     
    		propRep.setView(fntrPrinc);
    		propRep.setTitle("\""+ptsRep[noRep].nom+"\"");
    		propRep.setPositiveButton("Valider", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int which) {
    			}
    		});
    		propRep.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int which) {
    			}
    		});
    		dialog = propRep.create();
    		dialog.show();
    	}

    Par contre, fais bien attention à la syntaxe des lignes 15 à 20, tu n'utilises pas d’accolades et c'est assez dangereux quand on débute

  13. #13
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par Simon MARQUIS Voir le message
    Voici ma solution :
    Je ne l'ai pas testée mais je pense qu'elle doit fonctionner.
    Il faut que tu créés un objet AlertDialog, et que tu l'utilises ...
    Bon, finalement, ça marche, merci beaucoup.

    Cela n'avais pas fonctionné quand j'avais essayé ce que tu m'avais dit car j'avais placé la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		dialog = propRep.create();
    juste après la création de "propRep" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		final AlertDialog.Builder propRep = new AlertDialog.Builder(context);
    . Je viens de réessayer : même problème ??

    Par ailleurs, quand j'ai commencé à manipulé les AlertDialog, j'avais trouvé des exemples montrant ce que tu me dis de faire. Je m'étais aperçu que cela n'apportait rien (à ce moment) par rapport au fait de faire directement "propRep.show". Bon j'en vois maintenant l'avantage.

    Citation Envoyé par Simon MARQUIS Voir le message
    ... Par contre, fais bien attention à la syntaxe des lignes 15 à 20, tu n'utilises pas d’accolades et c'est assez dangereux quand on débute
    Si je suis un débutant en Java, j'ai une expérience de longue date du Pascal objet dans lequel les accolades sont remplacées par des "begin" "end" que je peux omettre (comme les accolades du java) s'il n'y a qu'une instruction à gérer.

    Merci encore.

    Cordialement.

    Pierre

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

Discussions similaires

  1. modification du titre d une zone de texte
    Par sunwind dans le forum IHM
    Réponses: 0
    Dernier message: 05/02/2008, 11h35
  2. Modification du titre de la fenêtre à partir d'une Vue
    Par d2025 dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 02/10/2007, 13h02

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