Umgang mit der Zurück-Schaltfläche in der Aktivität

136

Wie gehe ich mit einer Zurück-Schaltfläche in einer Aktivität um? Ich habe einige Knöpfe. Wenn ich auf eine der Schaltflächen klicke, wird zu den von mir benötigten Schaltflächen umgeleitet. Es funktioniert gut, aber wenn ich die Zurück-Taste drücke, ist es fertig.

So lösen Sie dieses Problem. Ich habe nur eine Aktivität für alle diese Schaltflächen. Danke im Voraus.

@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);
}

Ich habe den obigen Code verwendet, um die Zurück-Schaltfläche zu handhaben, aber sie funktioniert nicht. Wenn ich den Zurück-Knopf drücke, wird er dort selbst getroffen.

Shekhar
quelle

Antworten:

326

Sie können damit umgehen:

für API Level 5 und höher

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

älter als API 5

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

    return super.onKeyDown(keyCode, event);
}
Saurabh Pareek
quelle
6
Was ist mit Fragmenten?
Crushman
1
Ja, weiß jemand, wie man es aus einem Fragment macht
James Wierzba
3
@ James-Wierzba Handle in Aktivität und delegieren Verarbeitung an ein Fragment
Grigorii Chudnov
19

Darüber hinaus empfehle ich persönlich

onKeyUp():

Programmgesteuertes Keydown wird ausgelöst, wenn der Benutzer anfänglich eine Taste drückt , es wird jedoch wiederholt, während der Benutzer die Taste gedrückt hält. * *

Dies gilt für alle Entwicklungsplattformen.

Die Google-Entwicklung schlug vor, dass Sie, wenn Sie die Schaltfläche ZURÜCK in einer Ansicht abfangen, das KeyEvent mit Starttracking bei Keydown verfolgen und dann mit Keyup aufrufen sollten.

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);
}
Richard Sites
quelle
15

Sowohl für die Zurück-Taste des Hardwaregeräts als auch für die Soft-Home-Taste (Zurück), z. B. "<-", funktioniert dies für mich. (* Hinweis Ich habe eine App-Leiste / Symbolleiste in der Aktivität)

@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();

}

Prost!

Bruce
quelle
Ich habe Finish verwendet und es geht nicht zurück zur vorherigen Aktivität.
Si8
2
"finish ()" schließt nur Ihre aktuelle Aktivität. Sie müssen die Rückkehr zu Ihrer vorherigen Aktivität mit Absicht handhaben. Übrigens sollte Ihre vorherige Aktivität noch geöffnet sein, wenn Sie sie beim Navigieren nicht "beendet ()" haben.
Bruce
Ich teste etwas und werde dich aktualisieren. Danke für die Antwort.
Si8
1
Verwenden Sie einfach super.onBackPressed () anstelle von finish ()
b00n12
9

Ein einfacherer Ansatz besteht darin, das Drücken der Zurück-Taste zu erfassen und moveTaskToBack (true) wie folgt aufzurufen:

@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 hat eine neue onBackPressed-Methode eingeführt und diese Empfehlungen zum Umgang mit der Zurück-Schaltfläche

Umesh K.
quelle
9

Du solltest benutzen:

@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;
}

Wie hier definiert: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Wenn Sie zum Kompilieren des Codes eine ältere Version verwenden, ersetzen Sie android.os.Build.VERSION_CODES.ECLAIR durch 5 (Sie können beispielsweise einen privaten int mit dem Namen ECLAIR hinzufügen).

neteinstein
quelle
1

Das hat mir geholfen ..

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

ODER????? Sie können dies auch zum Umschalten der Schublade verwenden

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

Ich hoffe das würde dir helfen .. :)

Shubham
quelle
1

Dies ist eine einfache Möglichkeit, etwas zu tun.

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

Ich denke, es gibt vielleicht ausgefeiltere Wege, aber ich mag Einfachheit. Zum Beispiel habe ich die obige Vorlage verwendet, um den Benutzer dazu zu bringen, sich von der Anwendung abzumelden, und dann zu einer anderen Aktivität meiner Wahl zurückzukehren.

Eddie Towers
quelle