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 :)

0voto

Sie können es sogar noch einfacher machen, und ohne ein Handgerät zu verwenden, nur dies tun =)

Long firstClick = 1L;
Long secondClick = 0L;

@Override
public void onBackPressed() {
secondClick = System.currentTimeMillis();
    if ((secondClick - firstClick) / 1000 < 2) {
          super.onBackPressed();
    } else {
          firstClick = System.currentTimeMillis();
          Toast.makeText(MainActivity.this, "click BACK again to exit", Toast.LENGTH_SHORT).show();
        }
 }

0voto

Avinash Punkte 361
 private static final int TIME_DELAY = 2000;
    private static long back_pressed;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public void onBackPressed() {
        if (back_pressed + TIME_DELAY > System.currentTimeMillis()) {
            super.onBackPressed();
        } else {
            Toast.makeText(getBaseContext(), "Press once again to exit!",
                    Toast.LENGTH_SHORT).show();
        }
        back_pressed = System.currentTimeMillis();
    }

0voto

R41N Punkte 1

Hier ist meine Meinung dazu:

 int oddeven = 0;
 long backBtnPressed1;
 long backBtnPressed2;
 @Override
 public void onBackPressed() {
     oddeven++;
     if(oddeven%2==0){
         backBtnPressed2 = System.currentTimeMillis();
         if(backBtnPressed2-backBtnPressed1<2000) {
            super.onBackPressed();
            return;
         }
     }
     else if(oddeven%2==1) { 
         backBtnPressed1 = System.currentTimeMillis();    
        //  Insert toast back button here
     }
 }

0voto

urgentx Punkte 3682

Hier ist eine Möglichkeit, dies mit RxJava zu tun:

override fun onCreate(...) {
    backPresses.timeInterval(TimeUnit.MILLISECONDS, Schedulers.io())
            .skip(1) //Skip initial event; delay will be 0.
            .onMain()
            .subscribe {
                if (it.time() < 7000) super.onBackPressed() //7000 is the duration of a Toast with length LENGTH_LONG.
            }.addTo(compositeDisposable)

    backPresses.throttleFirst(7000, TimeUnit.MILLISECONDS, Schedulers.io())
            .subscribe { Toast.makeText(this, "Press back again to exit.", LENGTH_LONG).show() }
            .addTo(compositeDisposable)
}

override fun onBackPressed() = backPresses.onNext(Unit)

0voto

Zurück, wenn die Taste 2 Mal gedrückt wird

public void click(View view){
    if (isBackActivated) {
        this.finish();
    }
    if (!isBackActivated) {
        isBackActivated = true;
        Toast.makeText(getApplicationContext(), "Again", Toast.LENGTH_SHORT).show();
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                isBackActivated = false;  // setting isBackActivated after 2 second
            }
        }, 2000);
    }

}

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