Ich habe die folgende Aktivitätssequenz in einem Ordner Picker Teil einer App:onActivityResult nur einmal genannt
Aktivität A beginnt B. B startet dann Instanzen von sich selbst, die stapeln, wenn der Benutzer tiefer in den Ordnerbaum hineingeht. Immer wenn eine Instanz von B abgeschlossen ist (Ordner gewählt), sollten sie und alle vorhergehenden B s beendet werden und A sollte erneut angezeigt werden, mit dem propagierten Ergebnis. Wenn der Benutzer zurückläuft, sollten die vorhergehenden B s nicht enden, da der Benutzer in der Lage sein sollte, zwischen den Ordnerunterbäumen hin und her zu gehen.
Ich versuche, dies zu tun durch startActivityForResult Verwendung sowohl von A zu B und dann für jede neue Instanz von B. Wenn der Benutzer eine Instanz B beendet, verwende ich setResult und möchte es in der onActivityResult-Methode jeder vorhergehenden Instanz überprüfen. Wenn es RESULT_OK ist, setze ich das Ergebnis erneut und beende diese Instanz, bis alle von ihnen in einer kaskadierenden Sequenz beendet sind und A erneut mit dem Ergebnis angezeigt wird.
Die Sequenz so lange funktioniert, wie ich gehen A =>B (1) =>B (2) =>B (3) und Ziel, ohne in der B Rückzieher Teil .
Allerdings, wenn ich gehe A =>B (1) =>B (2) => zurück zum B (1) =>B (3) und Ziel, onActivityResult wird nur in B (1) beim Zurückgehen von B (2) das erste Mal aufgerufen, nicht wenn ich später darauf zurück gehe, wenn ich von B (3) fertig bin. B (1) wird einfach wieder aufgenommen, wenn in dieser Reihenfolge von B (3) zurückgegangen wird. Dies unterbricht die kaskadierende Endsequenz.
Warum wird onActivityResult nur einmal aufgerufen, zum Beispiel B (1)? Sollte es nicht jedes Mal aufgerufen werden, wenn eine Kindaktivität ein Ergebnis setzt und beendet?
Hier einige Code:
=== Aktivität A:
die erste B Instanz starten:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(intent, RequestCodes.ActivityB);
die endgültige B Ergebnis Empfang:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
...
}
}
=== Aktivität B:
starten neues Kind B von selbst:
Intent intent = new Intent(ActivityB.this, ActivityB.class);
startActivityForResult(intent, RequestCodes.ActivityB);
das Ergebnis einstellen, wenn Sie einen Ordner wählen:
Intent result = new Intent();
result.putExtra(...);
setResult(Activity.RESULT_OK, result);
finish();
das Kind Empfangen B Ergebnis in jedem Elternteil B Instanz (die aus irgendeinem Grunde nur das erste Mal in B (1) genannt wird):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
setResult(Activity.RESULT_OK, data);
finish();
}
}
Vielen Dank im Voraus.
In der letzten Methode sollten Sie statt 'setResult (..., Daten)' Dies ist ein Tippfehler oder ein Fehler? –
Das ist ein Tippfehler hier, ja, es sind Daten im Code. Vielen Dank. – Johe