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 :

quitte application KeyEvent.KEYCODE_BACK


Sujet :

Composants graphiques Android

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut quitte application KeyEvent.KEYCODE_BACK
    Bonjour,

    Je souhaiterais que dès l'appui sur le bouton Back, cela quitte mon application.

    Le problème c'est dès le démarrage cela affiche une AlertDialog, donc il faut 2 appuis pour quitter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) 
        {
     
            if (keyCode == KeyEvent.KEYCODE_BACK) {
            	finish();
            	return true;
            }
    		return false;
     
         }

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Tu peux également implémenter cette méthode dans ton AlertDialog qui elle appellera une fonction de ton Activity qui lui demandera de se fermer.

    http://developer.android.com/referen...view.KeyEvent)

    Mais bon tu es sur que tu veux fermer ton application à partir d'un retour sur ton alertDialog ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Je ne vois pas comment l'implémenter.

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Ben comme tu l'as fait sous l'acitivity

    Soit tu surcharges ta classe AlertDialog

    Soit tu passes pas onKeyListener

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AlertDialog alert = new AlertDialog.Builder(this).create();
    		alert.setOnKeyListener(new OnKeyListener() {
     
    			@Override
    			public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
    				// TODO Auto-generated method stub
    				return false;
    			}
    		});

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    J'ai fait ceci, il rentre 2 fois dans le if, sinon il quitte bien l'application mais donne des erreurs dans le logcat

    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
     
    	alert.create();
    		alert.setOnKeyListener(new OnKeyListener() {
     
    			@Override
    			public boolean onKey(DialogInterface dialog, int keyCode,
    					KeyEvent event) {
    				if (keyCode == KeyEvent.KEYCODE_BACK) {
    					Log.v("appui sur Back", "BACK");
     
    					finish();
    					return true;
    				}
    				return false;
    			}
    		});
    		alert.show();


    06-22 17:35:21.789: ERROR/WindowManager(21435): Activity com.monapplication has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40522910 that was originally added here

    06-22 17:35:21.789: ERROR/WindowManager(21435): android.view.WindowLeaked: Activity com.monapplication has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40522910 that was originally added here

    06-22 17:35:21.789: ERROR/WindowManager(21435): at com.monapplication.MaClasse.methode(MaClasse.java:245)
    La ligne 245 correspond à l'appel à show()

  6. #6
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Essaye de faire ce que je t'ai signalé plutôt fait un dismiss(); sur l'alerte puis ferme ton application , je pense que cela est la bonne méthode . car comme tu retourne true tu consumes ton KEY_BACK ce qui fait que ton alerte ne se ferme pas ^^

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Il rentre une fois en down et une fois en up. Si tu veux qu'il ne rentre qu'une seule fois utilises onKeyDown ou onKeyUp ou encore tu peux faire un test (dans ta méthode onKey) sur ton attribut event pour savoir s'il est en down ou upn

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    j'ai utilisé cela avant le finish mais toujours le meme problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alert.create().dismiss();

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Il rentre une fois en down et une fois en up. Si tu veux qu'il ne rentre qu'une seule fois utilises onKeyDown ou onKeyUp ou encore tu peux faire un test (dans ta méthode onKey) sur ton attribut event pour savoir s'il est en down ou upn
    Comment?

    tu ne peux pas implémenter dans le setOnKeyListener la méthode onKeyDown

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Citation Envoyé par jojo_ol76 Voir le message
    Comment?

    tu ne peux pas implémenter dans le setOnKeyListener la méthode onKeyDown
    Ah désolé !
    Ben tu peux toujours faire le test event.getAction() == KeyEvents.ACTION_DOWN

  11. #11
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bon , la remarque d'AndroChristophe est la bonne je pense .

    Après pour le dismiss() fait plutôt cela ainsi que pour le KEY_DOWN .

    N'oublie pas que nous sommes dans un OnKey et pas un OnKeyDown .

    Si tu veux utiliser la méthode onKeyDown surcharge ta class AlertDialog comme je te l'ai précisé auparavant .

    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
    alert.create();
    		alert.setOnKeyListener(new OnKeyListener() {
     
    			@Override
    			public boolean onKey(DialogInterface dialog, int keyCode,
    					KeyEvent event) {
    				if (keyCode == KeyEvent.KEYCODE_BACK && 
                                             event.getAction() == KeyEvent.ACTION_DOWN) {
    					Log.v("appui sur Back", "BACK");
                                            dialog.dismiss();
    					finish();
    					return true;
    				}
    				return false;
    			}
    		});
    		alert.show();

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Ok, sinon pour mon problème concernant les erreurs dans le logcat?

  13. #13
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Ben ...

    Activity com.monapplication has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40522910 that was originally added here
    C'est ce que je t'es expliqué , le dismiss manquait a t - on appel , après si cela continue alors je te conseille d'attendre 1 petite seconde avant de fermer ton application le temps que la dialogue se ferme .

    Pour expliquer plus précisément le log te dit que tu as une fuite sur une fenêtre qui était présente . ( L'alert dans ton cas ^^).

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    c'est bon, cela fonctionne il manquait le dismiss().

    Merci.

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Par défaut appyuer sur le bouton back android sans faire quitter l'application
    bonjour, moi je voudrais pouvoir contrôler le bouton back du téléphone pour qu'il puisse appeler des intents, ou juste afficher l'écran précédent.
    j'utilise déjà cette fonction mais il me manque quelque chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Override
    	public boolean onKeyDown(int keyCode, KeyEvent event) {
    	    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
    	    	event.
    	        Log.d(this.getClass().getName(), "back button pressed");
     
    	    }
    	    return super.onKeyDown(keyCode, event);
    	}
    merci de votre aide

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

Discussions similaires

  1. Formulaire toujours visible même si on quitte l'application
    Par sobjp2025 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/12/2009, 19h19
  2. Réponses: 32
    Dernier message: 24/11/2009, 21h57
  3. Réponses: 1
    Dernier message: 10/09/2008, 09h23
  4. [VB.net 2005] Application se quitte toute seule
    Par PoZZyX dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 10h13
  5. Réponses: 1
    Dernier message: 16/05/2004, 17h56

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