2016-07-13 7 views
1

Ich bin ein ziemlich Neuling mit Android-Programmierung.Aktivität A, die B startet, die C startet. Warum drücken Sie die Zurück-Taste in C zurück zu A?

Ich habe eine MainActivity von dem ich ein SecondActivity starten:

[...] 
Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
intent.putExtra("mode", eTravelEditMode.Create); 
startActivityForResult(intent, MainActivity.REQUEST_CREATE); 
[...] 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == MainActivity.REQUEST_CREATE) { 
    } 
} 

Im SecondActivity, beginne ich eine ThirdActivity:

[...] 
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class); 
startActivityForResult(intent, SecondActivity.REQUEST_SELECT); 
[...] 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //this method is never called 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == SecondActivity.REQUEST_SELECT) { 
     [...] 
    } 

Im ThirdActivity:

@Override 
public void onBackPressed() { 

    Intent intent = new Intent(); 
    //intent.putExtra("returnValue", (Serializable) mAdapter.getSelectedValues()); 
    setResult(SecondActivity.RETURN_SELECT, intent); 

    super.onBackPressed(); 
    this.finish(); 
} 

Aus ThirdActivity Ich möchte einen Wert an seine Eltern SecondActivity zurückgeben, wenn ich die Zurück-Taste drücke. Aber dann wird das SecondActivity.onActivityResult nie aufgerufen. Das MainActivity.onActivityResult wird aufgerufen.

Irgendwelche Ideen über was falsch ist?

+0

Kannst du 'finish()' irgendwo in deiner SecondActivity nennen? – Vucko

+0

Die zweite Aktivität wird irgendwo zerstört. – user3765370

+0

@vucko: Es gibt keine Ende() Anruf in der zweiten Aktivität – kevinob

Antwort

2

Yeah Handhabung Intents und Verwaltung der Aktivität Stack kann schwierig sein, egal wie erfahren Sie bei der Entwicklung für Android sind. Im Allgemeinen sollten Sie nicht die Zurück-Taste drücken müssen, um in Ihrer App-Logik vorwärts zu gehen. Es gibt drei Punkte, die ich habe:

  1. Explaination: Wenn Sie zurück zu SecondActivity von ThirdActivity verschieben möchten, nur finish() Aufruf wird für Sie das tun, da Sie die dritte Aktivität mit startActivityForResult gestartet (Intent) vs mit startActivity (Absicht). Also, was passiert in Ihrem Code, denke ich, ist , dass Sie tatsächlich zurück gehen durch Androiden Back Stack Navigationssystem, und gehen wieder zurück durch finish(). Du gehst also zweimal zurück, weshalb du wieder bei der Hauptaktivität bist. Ich denke.

    Mehr Informationen über die Aktivität Stack und zurück Navigation kann hier: https://developer.android.com/training/implementing-navigation/temporal.html

  2. Vorschlag Versuchen Sie eine Schaltfläche Hinzufügen und im onClick() -Methode für diese Schaltfläche haben Ihre finish(), statt Verwenden der Android-Navigation zurück. Ich würde bleiben weg von der Verwendung von Ihnen Taste als Mittel der Progression für Ihre App.
  3. Vorschlag: Wenn logisch der Benutzer von ActivityTwo zu ActivityThree gehen würde und zurück zu ActivityTwo, würde ich entweder die finish() eine natürliche Entwicklung in Ihrer Anwendung Logik, da im Allgemeinen das ist, was Sie für startActivityForResult wollen (Absicht) vs startActivity (Absicht).
+0

Ich denke, deine ist die beste Antwort bisher. Der Aufruf von 'finish()' ist jedoch keine sehr gesunde Wahl. Der Artikel beschreibt die Aktivitätshierarchie. Der richtige Weg, um dies zu tun ist, erklären Eltern Aktivitäten – Chisko

+0

True, aber meine Interpretation war, dass Kevinob wollte die dritte Aktivität mit nur für die Zwecke der Herstellung eines Ergebnisses zu starten, so dass er wirklich nicht die Zurück-Taste überhaupt verwenden sollte und nur mit 'finish()'. Und wenn Sie eine Aktivität starten, die 'startActivityForResult()' verwendet, war die Verwendung von 'finish()' der richtige Weg, um den Lebenszyklus dieser Aktivität zu beenden, nein? –

+1

'finish()' ist eine sehr gesunde Wahl. Mehr als das, in diesem Fall ist es die richtige Wahl. Elternaktivitäten werden für etwas anderes verwendet, für "Navigation nach oben". –

-2

Versuchen Sie dies!

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(CurrentActivity.this, A.class); 
    startActivity(intent); 
} 
+1

Sie stapeln nur Aktivitäten übereinander. Dies ist keine vollständige Lösung. – Chisko

0

Ich habe mir nur mein AndroidManifest angesehen.xml:

<activity android:name=".forms.SecondActivity" 
      android:label="@string/mylabel" 
      android:noHistory="true" 
> 

Ich entfernte "android: noHistory =" true "" und jetzt funktioniert alles reibungslos. Ein Kopieren/Einfügen aus einer Helloworld Ich denke, ich bin verwirrt! :) Danke