it-swarm.com.de

So schließen Sie die Aktivität und kehren Sie zur vorherigen Aktivität in Android zurück

Ich habe eine Hauptaktivität, die, wenn ich auf eine Schaltfläche klicke, eine neue Aktivität startet, den folgenden Code dazu verwendet:

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

Der obige Code wurde aus der Hauptaktivität ausgeführt.

Nun habe ich in meiner neuen Aktivität, die von der Hauptaktivität aufgerufen wird, eine Zurück-Schaltfläche. Wenn ich auf diese Zurück-Schaltfläche klicke, möchte ich, dass meine neue Aktivität geschlossen wird und sie zur ursprünglichen Hauptaktivität zurückkehren muss.

Ich habe versucht, super.finish() und nur finish() (aus der neuen Aktivität) aufzurufen, aber dadurch wird meine gesamte Anwendung (einschließlich meiner Hauptaktivität) geschlossen.

Wie kann ich die gerade im Fokus stehende Aktivität schließen und zur Hauptaktivität zurückkehren?

BEARBEITET

Die Tatsache, dass die Zurück-Taste meines Handys auch meine gesamte App schließt, lässt mich vermuten, dass ich die zweite Aktivität falsch gestartet habe. 


OK, ich habe gesucht,

Ich habe eine Einstellungsaktivität erstellt, die den gleichen Manifestcode und den gleichen Code zum Starten der Aktivität verwendet.

Für die Einstellungen Aktivität, wenn ich die Zurück-Taste drücke, wird wieder die Hauptaktivität angezeigt.

Mit der oben in der Hauptfrage genannten Aktivität wird einfach meine gesamte App beendet.

Das Problem scheint also nicht der Code zu sein, sondern die Aktivität selbst.

117
Zapnologica

Ich denke, Sie rufen die finish()-Methode in MainActivity auf, bevor Sie SettingsActivity starten.

Das von Ihnen beschriebene Szenario wird auf zwei Arten auftreten:

ENTWEDER

Sie haben Android:noHistory = "true" für MainActivity in AndroidManifest.xml eingestellt, wodurch MainActivity automatisch finish beim Drücken der Zurück-Taste wird.

OR

Bevor Sie zu Ihrer 'SettingsActivity' wechseln, haben Sie finish() in Ihrer MainActivity aufgerufen. Wenn Sie die Zurück-Taste drücken, wird keine andere Aktivität im Stack-Popup-Modus voreingestellt, und der Hauptbildschirm wird angezeigt.

171
Ajay S

Sie können zur vorherigen Aktivität zurückkehren, indem Sie in der Aktivität, in der Sie gerade arbeiten, einfach finish () aufrufen. Beachten Sie, dass der Code nach dem finish () - Aufruf ausgeführt wird - Sie können nach dem Aufruf von finish () einfach einen Return ausführen, um dies zu beheben. 

Wenn Sie Ergebnisse zu Aktivität 1 zurückgeben möchten, benötigen Sie beim Starten von Aktivität 2 Folgendes:

startActivityForResults(myIntent, MY_REQUEST_CODE);

Innerhalb Ihrer aufgerufenen Aktivität können Sie dann den Intent vom Parameter onCreate () abrufen oder verwenden

getIntent();

Um ein Ergebnis auf Aktivität Eins zurückzusetzen, dann in Aktivität Zwei tun

setResult(Activity.RESULT_OK, MyIntentToReturn);

Wenn Sie nicht die Absicht haben, zurückzukehren, sagen Sie einfach

setResult(Activity.RESULT_OK);

Wenn die Aktivität schlechte Ergebnisse aufweist, können Sie Activity.RESULT_CANCELED verwenden (dies wird standardmäßig verwendet). Dann machst du in Aktivität eins

onActivityResult(int requestCode, int resultCode, Intent data) {
    // Handle the logic for the requestCode, resultCode and data returned...
}

Um die Übung 2 zu beenden, verwenden Sie die gleichen Methoden wie oben beschrieben mit den bereits festgelegten Ergebnissen.

53
jjNford

Wenn Sie auf Ihre Schaltfläche klicken, können Sie sie anrufen lassen:

super.onBackPressed();
14
Zabador

wenn Sie Fragment verwenden, sollten Sie verwenden 

getActivity().onBackPressed();

wenn Sie eine einzelne Aktivität verwenden, können Sie verwenden 

finish();
8
Osama Ibrahim

versuchen Sie diesen Code anstelle von finish:

onBackPressed();

5
Sanaz Afzali

Damit ist die gesamte Anwendung geschlossen:

this.finish();
4
Logar314159

Du machst das zu schwer. Wenn ich verstehe, was Sie richtig versuchen, erledigen der eingebaute "Zurück" -Button und Android selbst die gesamte Arbeit für Sie: http://developer.Android.com/guide/components/tasks-and- back-stack.html

Die Implementierung einer benutzerdefinierten Schaltfläche "Zurück" verstößt außerdem gegen die UX-N1-Richtlinie zur Qualitätssicherung für grundlegende Apps: http://developer.Android.com/distribute/googleplay/quality/core.html

4
peejaybee
Button edit = (Button) view.findViewById(R.id.yourButton);
edit.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, YourMainActivity.class);
        startActivity(intent);
        finish();
    }
});
4
KEYSAN

Ich glaube, dass Ihre zweite Aktivität wahrscheinlich nicht mit Ihrer Hauptaktivität als Kinderaktivität zusammenhängt. Überprüfen Sie Ihre AndroidManifest.xml-Datei und prüfen Sie, ob der <activity>-Eintrag für Ihre untergeordnete Aktivität ein Android:parentActivityName-Attribut enthält. Es sollte ungefähr so ​​aussehen:

<?xml ...?>
...
<activity
    Android:name=".MainActivity"
    ...>
</activity>
<activity
    Android:name=".ChildActivity"
    Android:parentActivityName=".MainActivity"
    ...>
</activity>
...
2
Trevor

Ich weiß nicht, ob das überhaupt nützlich ist oder nicht, aber ich hatte mit dem gleichen Problem zu kämpfen und fand einen ziemlich einfachen Weg, nur mit einer globalen booleschen Variablen und der onResume () -Aktion. In meinem Fall sollte meine Aktivität C, wenn Sie auf eine bestimmte Schaltfläche klicken, das Ende () von Aktivität B auslösen!

Aktivität_A -> Aktivität_B -> Aktivität_C

Activity_A (öffnet normalerweise Activity_B)

Activity_B (auf einigen Schaltflächen öffnet sich Activity_C):

// Global:
boolean its_detail = false;
// -------
SharedPreferences prefs =  getApplicationContext().getSharedPreferences("sharedpreferences", 0);
boolean v = prefs.getBoolean("select_client", false);

its_detail = v;

startActivity(C);

@Override
public void onResume(){
     super.onResume();
     if(its_detail == true){
        finish();
     }
}

Jedes Mal, wenn ich auf die Schaltfläche in Aktivität C klicke, würde ich die Funktion "onResume ()" von Aktivität B ausführen und zu Aktivität A zurückkehren.

1
user2742861

Rufen Sie einfach nicht finish() für Ihre MainActivity auf. Dann müssen Sie Ihre onBackPressed() in Ihrer SecondActivity nicht überschreiben, es sei denn, Sie machen andere Aufgaben in dieser Funktion. Wenn Sie das "Bedürfnis" für diese Zurück-Taste empfinden, können Sie einfach finish() für die SecondActivity aufrufen, und Sie gelangen zu Ihrer MainActivity, solange Sie finish() nicht aufgerufen haben

1
codeMagic
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if ( id == Android.R.id.home ) {
            finish();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

Versuchen Sie dies, es funktioniert sowohl auf Symbolleisten-Zurück-Schaltfläche als Hardware-Zurück-Schaltfläche .

1
Puni

Finish schließt die gesamte Anwendung. Dies ist etwas, das ich in der Android-Entwicklung nicht hasse 

startActivity(intent)

Warum nicht 

closeActivity (Absicht) ?

0
Kent Hansen

möglicherweise rufen Sie Finish () auf. Im Klick-Schaltflächen-Ereignis wird die Hauptaktivität geschlossen, sobald Sie auf die Schaltfläche klicken. Wenn Sie von der nächsten Aktivität zurückkehren, wird die Anwendung beendet, da die Hauptaktivität bereits geschlossen ist und keine aktive Aktivität vorhanden ist.

0
raman rayat

Wir sind auf eine sehr ähnliche Situation gestoßen.

Aktivität 1 (Öffnen) -> Aktivität 2 (Vorschau) -> Aktivität 3 (Detail)

Falsches "Zurückdrücken" - Antwort 

  • Wenn Sie auf Aktivität 3 zurück drücken, wird auch Aktivität 2 geschlossen.

Ich habe alle Antworten geprüft und keine hat funktioniert. Die Java-Syntax für den Übergang zwischen Aktivität 2 und Aktivität 3 wurde auf ihre Richtigkeit überprüft.

Frisch von der Codierung beim Aufruf einer 3rd-Party-App. durch eine Aktivität. Wir haben uns entschieden, den Konfigurationswinkel zu untersuchen, um schließlich die Ursache des Problems zu ermitteln.

Umfang : Konfiguration von Aktivität 2 (Anrufer).

Ursache :

Android:launchMode="singleInstance"

Lösung :

Android:launchMode="singleTask"

Anscheinend berücksichtigt die Ausgabe singleInstance in dieser Instanz die aufgerufenen Aktivitäten in einer Instanz mit der aufrufenden Aktivität, während singleTask zulässt, dass aufgerufene Aktivitäten über eine eigene Identität verfügen, die für das beabsichtigte Zurückdrücken von Bedeutung ist Arbeit, wie es sollte. 

0
Raven
{ getApplicationContext.finish();   }

Probiere diese Methode aus .. 

0
Abhishek

schreiben Sie den folgenden Code für die onCreate-Methode Ihrer Aktivität.

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

Überschreiben Sie dann die ausgewählte onOptionsItem-Methode Ihrer Aktivität wie folgt

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case Android.R.id.home:
            finish();
    }
    return super.onOptionsItemSelected(item);
}

Und du bist gut zu gehen.

0
Hagos Alema