87 votes

Android: Manière d'utiliser onBackPressed ()

J'ai écrit un morceau de code qui donnera à l'utilisateur une invite lui demandant de presser à nouveau s'il souhaite quitter. Mon code fonctionne actuellement dans une certaine mesure, mais je sais qu'il est mal écrit et je suppose qu'il existe une meilleure façon de le faire. Toute suggestion serait utile!

Code:

 public void onBackPressed(){
    backpress = (backpress + 1);
    Toast.makeText(getApplicationContext(), " Press Back again to Exit ", Toast.LENGTH_SHORT).show();


    if (backpress>1) {
        this.finish();
    }

}
 

216voto

Steve Prentice Points 7638

J'implémenterais une boîte de dialogue demandant à l'utilisateur s'il souhaitait quitter, puis appelait super.onBackPressed () s'il le faisait.

 @Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
        .setTitle("Really Exit?")
        .setMessage("Are you sure you want to exit?")
        .setNegativeButton(android.R.string.no, null)
        .setPositiveButton(android.R.string.yes, new OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                WelcomeActivity.super.onBackPressed();
            }
        }).create().show();
}
 

Dans l'exemple ci-dessus, vous devrez remplacer WelcomeActivity par le nom de votre activité.

19voto

A Person Points 921

Vous n'avez pas besoin d'un compteur pour les presses à dos.

Stockez simplement une référence au pain grillé affiché:

private Toast backtoast;

Ensuite,

 public void onBackPressed() {
    if(USER_IS_GOING_TO_EXIT) {
        if(backtoast!=null&&backtoast.getView().getWindowToken()!=null) {
            finish();
        } else {
            backtoast = Toast.makeText(this, "Press back to exit", Toast.LENGTH_SHORT);
            backtoast.show();
        }
    } else {
        //other stuff...
        super.onBackPressed();
    }
}
 

Cette opération appelle finish() si vous appuyez sur la touche Retour tant que le pain est toujours visible, et uniquement si cette dernière a pour effet de quitter l’application.

14voto

SoloPilot Points 319

J'utilise cette approche beaucoup plus simple ...

 public class XYZ extends Activity {
    private long backPressedTime = 0;    // used by onBackPressed()


    @Override
    public void onBackPressed() {        // to prevent irritating accidental logouts
        long t = System.currentTimeMillis();
        if (t - backPressedTime > 2000) {    // 2 secs
            backPressedTime = t;
            Toast.makeText(this, "Press back again to logout",
                                Toast.LENGTH_SHORT).show();
        } else {    // this guy is serious
            // clean up
            super.onBackPressed();       // bye
        }
    }
}
 

2voto

yep Points 94

Les chemins @ et Steve sont des moyens acceptables de prévenir les sorties accidentelles.

Si vous choisissez de poursuivre votre implémentation, vous devrez vous assurer que backpress est initialisé à 0 et probablement implémenter un Timer pour le remettre à 0 lors de la pression de touche, après un délai de récupération. (~ 5 secondes semble juste)

2voto

Alex Gitelman Points 15062

Vous devrez peut-être également réinitialiser le compteur en onPause pour éviter les cas où l'utilisateur clique sur la touche d'accueil ou navigue par un autre moyen après la première pression en retour. Sinon, je ne vois pas de problème.

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