389 Stimmen

Zweimaliges Klicken auf die Zurück-Taste, um eine Aktivität zu beenden

Dieses Muster ist mir in letzter Zeit bei vielen Android-Apps und -Spielen aufgefallen: Wenn man auf die Schaltfläche "Zurück" klickt, um die Anwendung zu beenden, erscheint ein Toast erscheint eine Meldung ähnlich wie "Bitte klicken Sie zum Beenden erneut auf ZURÜCK".

Ich frage mich, da ich das immer häufiger sehe, ob das eine eingebaute Funktion ist, auf die man irgendwie in einer Aktivität zugreifen kann? Ich habe mir den Quellcode vieler Klassen angesehen, aber ich kann nichts darüber finden.

Natürlich kann ich über ein paar Möglichkeiten, die gleiche Funktionalität ganz leicht zu erreichen denken (die einfachste ist wahrscheinlich ein Boolean in der Aktivität zu halten, die anzeigt, ob der Benutzer bereits einmal geklickt...), aber ich war wundernd, wenn es etwas bereits hier ist.

EDITAR : Wie @LAS_VEGAS erwähnte, meinte ich nicht wirklich "Ausgang" in der traditionellen Bedeutung. (d.h. beendet) Ich meinte "zu dem zurückkehren, was vor dem Start der Anwendungsaktivität geöffnet war", wenn das Sinn macht :)

2voto

Sai Aditya Punkte 2266
@Override public void onBackPressed() {
   Log.d("CDA", "onBackPressed Called");
   Intent intent = new Intent();
   intent.setAction(Intent.ACTION_MAIN);
   intent.addCategory(Intent.CATEGORY_HOME);

   startActivity(intent);
}

2voto

Saket Kumar Punkte 453

Hier ist der vollständige Arbeitscode. Und vergessen Sie auch nicht, die Rückrufe zu entfernen, damit es nicht zu einem Speicherleck in der App kommt :)

private boolean backPressedOnce = false;
private Handler statusUpdateHandler;
private Runnable statusUpdateRunnable;

public void onBackPressed() {
        if (backPressedOnce) {
            finish();
        }

        backPressedOnce = true;
        final Toast toast = Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT);
        toast.show();

        statusUpdateRunnable = new Runnable() {
            @Override
            public void run() {
                backPressedOnce = false;
                toast.cancel();  //Removes the toast after the exit.
            }
        };

        statusUpdateHandler.postDelayed(statusUpdateRunnable, 2000);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (statusUpdateHandler != null) {
        statusUpdateHandler.removeCallbacks(statusUpdateRunnable);
    }
}

2voto

Priya Rajan Punkte 677

Für die Tätigkeit, die mit Navigation Schublade Verwenden Sie den folgenden Code für OnBackPressed()

boolean doubleBackToExitPressedOnce = false;

@Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            if (doubleBackToExitPressedOnce) {
                if (getFragmentManager().getBackStackEntryCount() ==0) {
                    finishAffinity();
                    System.exit(0);
                } else {
                    getFragmentManager().popBackStackImmediate();
                }
                return;
            }

            if (getFragmentManager().getBackStackEntryCount() ==0) {
                this.doubleBackToExitPressedOnce = true;
                Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        doubleBackToExitPressedOnce = false;
                    }
                }, 2000);
            } else {
                getFragmentManager().popBackStackImmediate();
            }
        }
    }

1voto

Shailendra Madda Punkte 19055

In Kotlin auf der Rückseite drücken, um die App zu beenden können Sie verwenden:

Definieren Sie eine globale Variable:

private var doubleBackToExitPressedOnce = false

Überschreiben Sie onBackPressed:

override fun onBackPressed() {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed()
            return
        }

        doubleBackToExitPressedOnce = true
        Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_LONG).show()

        Handler().postDelayed({
            doubleBackToExitPressedOnce = false;
        }, 2000)
    }

1voto

Ganesh MB Punkte 909

Diese Antwort ist einfach zu bedienen, aber wir müssen zum Beenden doppelt tippen. Ich ändere einfach die Antwort,

    @Override
public void onBackPressed() {
    ++k;
    if(k==1){
        Toast.makeText(this, "Press back one more time to exit", Toast.LENGTH_SHORT).show();
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                --k;
            }
        },1000);
    }else{
        //do whatever you want to do on the click after the first for example:
        finishAffinity();
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X