149 votes

Comment gérer le bouton retour dans une activité

Comment gérer un bouton retour dans une activité ? J'ai quelques boutons. Si je clique sur l'un d'entre eux, il est redirigé vers les boutons dont j'ai besoin. Cela fonctionne bien mais lorsque j'appuie sur le bouton retour, l'activité se termine.

Comment résoudre ce problème. Je n'ai qu'une seule activité pour tous ces boutons. Merci d'avance.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

J'ai utilisé le code ci-dessus pour gérer le bouton retour mais cela ne fonctionne pas. Lorsque j'appuie sur le bouton "retour", il se met en place tout seul.

357voto

Saurabh Pareek Points 2954

Vous pouvez le gérer comme ça :

pour les API de niveau 5 et plus

@Override
public void onBackPressed() {
    // your code.
}

plus ancien que l'API 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

7 votes

Qu'en est-il des fragments ?

1 votes

Oui, quelqu'un sait-il comment le faire à partir d'un fragment ?

3 votes

@james-wierzba gérer en activité et déléguer le traitement à un fragment

19voto

Richard Sites Points 129

En plus de ce qui précède, je recommande personnellement

onKeyUp():

Parler de manière programmée keydown se déclenchera lorsque l'utilisateur appuiera sur une touche au départ. pero Il sera répéter pendant que l'utilisateur maintient la touche enfoncée. *

Cela reste vrai pour toutes les plateformes de développement.

Google Development a suggéré que si vous interceptez le bouton BACK dans une vue, vous devriez suivre le KeyEvent avec starttracking sur keydown puis invoquer avec keyup.

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

17voto

S bruce Points 1251

Pour le bouton de retour du dispositif matériel et le bouton d'accueil (retour) logiciel, par exemple " <- ", c'est ce qui fonctionne pour moi. (*Notez que j'ai une barre d'applications / barre d'outils dans l'activité).

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}

@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

A la vôtre !

9voto

user449355 Points 4512

Une approche plus simple consiste à capturer l'appui sur le bouton Retour et à appeler moveTaskToBack(true) comme suit :

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Android 2.0 a introduit une nouvelle méthode onBackPressed, et ces recommandations sur la façon de gérer le bouton Retour

9voto

NeTeInStEiN Points 7331

Vous devriez utiliser :

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

Comme défini ici : http://Android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Si vous utilisez une ancienne version pour compiler le code, remplacez Android.os.Build.VERSION_CODES.ECLAIR par 5 (vous pouvez ajouter un int privé nommé ECLAIR par exemple)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X