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 :

Bloquer le bouton retour


Sujet :

Composants graphiques Android

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut Bloquer le bouton retour
    Bonjour à tous,

    j'aimerai réaliser un petit truc tout simple à mon avis mais je ne trouve pas le solution.

    J'ai une page de chargement au lancement de mon application le temps que toutes les données ce charge et après j'arrive sur l'activité principale.

    Cependant comment je peux faire pour bloquer le bouton retour physique du téléphone. En effet, car si j'appuie sur retour je reviens sur la page de chargement, alors qu'il faudrait que ça quitte l'application.

    Je vous remercie.

    Italia57

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Par défaut
    Salut Italia57!! Essaye avec ca :

    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
    private MyState appState;
     
    @Override
    public void onBackPressed() {	
          return;
    }
     
    @Override
    protected void onPause() {
            ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
            List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            if (!taskInfo.isEmpty()) {
            	ComponentName topActivity = taskInfo.get(0).topActivity; 
            	if (!topActivity.getPackageName().equals(this.getPackageName())) {
                	appState.setState(false);
            	} 
            }
            super.onPause();
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    Il ne me reconnait pas cette ligne eclipse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private MyState appState;
    et ne propose pas d'import...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 64
    Par défaut
    Plus simplement:

    Dans ton Activity précédente, une fois que tout est chargé tu as juste à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    startActivity(...)
    finish();

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    Oui merci c'est plus simple et ça marche.
    Par contre dans l'activité suivante du coup je voudrais faire que quand il clic sur le bouton back je lui demande s'il veut vraiment fermer l'application. J'ai fais ça mais ça fonctionne pas ça quitte sans proposer le message à l'utilisateur:

    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
     
    public boolean onkeydown(int keyCode, KeyEvent event) 
         {
     
                 if (keyCode == KeyEvent.KEYCODE_BACK) {
     
                	 AlertDialog.Builder builder = new AlertDialog.Builder(RestoManiakAlpha.this);
     				builder.setMessage("Êtes-vous sur de vouloir quitter l'application ?");
     				builder.setCancelable(false);
     				builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
     
    					public void onClick(DialogInterface dialog, int which) {
    						// TODO Auto-generated method stub
    						finish();
     
    					}
     
     
    				});
     
     				builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {
     							public void onClick(final DialogInterface dialog, final int id) {
     								dialog.cancel();
     
     							}
    				});
     				builder.show();
                 }
    			return true;
     
          }
    EDIT: il ne rentre jamais dans le if... ni dans la fonction

  6. #6
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    public void onBackPressed()

    pas onKeyDown (clavier)

    Le "back" peut être un simple bouton d'UI (tablettes...)
    Le Key "back" c'est le retour en arriere (delete ?) rien à voir....

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    J'ai donc ça à présent mais ça ne fonctionne toujours pas:

    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
     
    public void onBackPressed(int keyCode, KeyEvent event) 
         {
     
    		 if (keyCode == KeyEvent.KEYCODE_BACK) {
     
     
    			AlertDialog.Builder builder = new AlertDialog.Builder(RestoManiakAlpha.this);
    			builder.setMessage("Êtes-vous sur de vouloir quitter l'application ?");
    			builder.setCancelable(false);
    			builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
     
    				public void onClick(DialogInterface dialog, int which) {
    					// TODO Auto-generated method stub
    						finish();
     
    					}
     
     
    			});
     
    			builder.setNegativeButton("Non", new DialogInterface.OnClickListener() {
    				public void onClick(final DialogInterface dialog, final int id) {
     
    					dialog.cancel();
     
    				}
    			});
    			builder.show();
    		 }
     
          }

  8. #8
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    et Eclipse ne dit rien avec un @Override ?

    1. Eclipse devrait mettre une erreur en disant que cette fonction n'override rien. Si ce n'est pas le cas, aller dans window/preferences: Java/Compiler/Error-Warnings, et section Annotations, vérifier que TOUT est à "warning" au minimum... (la première devrait même etre à 'Error')

    2. Comment tu fais pour surcharger une fonction ? Normalement on fait: Bouton droit / Source / Override/Implement method, et on choisi la(les) méthode(s) à overrider... Ca évite pas mal d'erreur de surcharges...

    3. Finalement y a t il le petit triangle vert (ou bleu) à coté de la méthode dans la marge du fichier, ou sur la méthode dans le package-explorer ? Oui, Eclipse a bien trouvé la fonction "parente", Non... il y a un soucis...

    Faire l'une des 3 parties ci-dessus t'aidera à trouver ton erreur....

  9. #9
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    J'ai appliqué ta première solution, j'ai mis warnings partout et pourtant rien de nouveau.

    Si je fais ta méthode 2 on ne me propose pas de surcharger cette méthode car l'activité hérite de MapActivity et non de Activity.

    Pour ta méthode 3 j'ai un triangle bleu dans l'explorer pour les deux fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new DialogInterface.OnClickListener()
    présentes dans la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void onBackPressed(int keyCode, KeyEvent event)
    Mais pas de triangle bleu à coté de la fonction elle même

  10. #10
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par italia57 Voir le message
    J'ai appliqué ta première solution, j'ai mis warnings partout et pourtant rien de nouveau.
    Même avec @Override avant la méthode onBackPressed ? J'y crois pas.

    Si je fais ta méthode 2 on ne me propose pas de surcharger cette méthode car l'activité hérite de MapActivity et non de Activity.
    Mais comme MapActivity hérite de Activity, si on te propose bien de surcharger la méthode (je viens de vérifier)

    Pour ta méthode 3 j'ai un triangle bleu dans l'explorer pour les deux fonctions
    ...
    Mais pas de triangle bleu à coté de la fonction elle même
    Donc ça veut dire que ? (au passage il doit être vert le triangle à priori)

  11. #11
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    Quand je met @Override j'ai une erreur et si je clic dessus ça me propose de le supprimer.

    Pour la méthode 2 voici les propositions que j'ai dans MapActivity:


  12. #12
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    J'essaye de te faire découvrir la raison, mais j'ai du mal

    Quand je met @Override j'ai une erreur
    avant de laisser Eclipse corriger (mal)... quelle erreur est-ce ? lis bien !

    Pour la methode deux... il n'y a que MapActivity de déroulé... si tu déroules Activity..... ? (tu peux aussi cliquer sur le petit bouton en forme d'arbre en haut a droite afin d'avoir les fonctions en liste, et non organisées par classe)

    Sinon tu n'as pas répondu à ma question, que veut dire le fait de ne PAS avoir de triangle (bleu ou vert) associé à la fonction ?

  13. #13
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    J'ai coché la case adéquate et pourtant ça ne fonctionne toujours pas. A présent je la retrouve même plus dans la liste.

    L'histoire des triangles j'avoue que j'en ai aucune idée.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 64
    Par défaut
    Et en enlevant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (keyCode == KeyEvent.KEYCODE_BACK)
    ?

    Il ne sert à rien ici

  15. #15
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    En enlevant le if ça ne marche toujours pas

  16. #16
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Bon je vais donner la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void onBackPressed(int keyCode, KeyEvent event)
    n'override aucune autre fonction, elle ne sera donc jamais appelée....
    La signature de onBackPressed est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public void onBackPressed()
    (sans parametre)

    Le @Override indique au compilateur, que cette fonction surcharge une autre fonction... si le compilateur indiquait une erreur, celle-ci devait être du style "function doesn't override any parent method", ce qui aurait du te mettre la puce à l'oreille. Invsersement, une fonction qui override une méthode parent et qui n'a pas le @Override devrait indiquer un "warning" (au moins) pour être sur de pas modifier les paramètres par mégarde.

    Le triangle associé à la fonction dans l'interface d'eclipse indique aussi que la fonction surcharge une fonction d'une classe parente: triangle vide et bleu pour une surcharge d'interface (pas d'implémentation), triangle vert plein pour une surcharge de classe avec implémentation. A noter que cliquer sur ce triangle permet de se rendre instantanément à la déclaration et/ou implémentation parente.

    Enfin, la méthode de surcharge d'eclipse permet de ne jamais se tromper... si tu as "coché" Activity, tu as demandé à eclipse de surcharger *TOUTES* les fonctions de Activity (ce qui n'était pas le but)... il suffisait de DEROULER la liste des fonctions de Activity (le petit triangle à gauche de la case à cocher) et tu aurais trouvé la fonction "void onBackPressed()" qu'il suffisait de cocher (et elle seule) pour générer automatiquement la surcharge dans le code... Comme eclipse, intelligemment, ne propose pas les méthodes déjà surchargées, recommencer l'opération fait 'disparaitre' Activity (puisqu'il n'y a plus aucune fonction de cette classe à surcharger)

  17. #17
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Par défaut
    Oh merci ça fonctionne.

    Maintenant que tu me l'expliques je le comprend, mais jamais j'y serai arrivé seul à en déduire cela.

    Merci encore une fois nicroman. Merci également aux autres qui ont pris part à la conversation.

    Le sujet est clos.

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

Discussions similaires

  1. bouton retour
    Par joe206 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/05/2006, 15h33
  2. [Mail] Couleur de l'echo et bouton retour
    Par joe206 dans le forum Langage
    Réponses: 4
    Dernier message: 09/05/2006, 08h48
  3. [FLASH] Bouton retour
    Par rhums dans le forum Flash
    Réponses: 4
    Dernier message: 09/03/2006, 15h32
  4. en vba bloquer le bouton précédent
    Par Pouyou le caribou dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 19h26
  5. Désactivé le bouton retour.
    Par glanumf dans le forum ASP
    Réponses: 3
    Dernier message: 31/05/2005, 16h25

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