Ich habe eine Xamarin Android-Anwendung und ich habe drei Aktivitäten A, B, C. Aktivität A beginnt B, die C kann oder nicht gestartet werden soll ich Aktivität A von Ergebnisse erhalten entweder Aktivität B oder C.Android Aktivität vorwärts Ergebnis nicht wie erwartet funktioniert
Wenn Aktivität B nie Aktivität CI startet erfolgreich Daten zurück an Aktivität A erhalten können, indem Sie
Intent intent = new Intent();
intent.PutExtra("DataId", item.Id);
SetResult(Result.Ok, intent);
Wenn der Benutzer Aktivität C dann verwende ich diesen Code starten Weiterleitung des Ergebnisses aus Aktivität C Aktivität
Intent intent = new Intent(this, typeof(ActivityC));
intent.PutExtra("DataId", dataId);
intent.SetFlags(ActivityFlags.ForwardResult);
StartActivity(intent);
Wenn Aktivität B beginnt Aktivität C und dann Aktivität C nach A zurück erlauben will Rückgabedaten mache ich das mit diesem Code
Intent result = new Intent();
result.PutExtra("DataId", dataId);
SetResult(Result.Ok, result);
Finish();
Intent intent = new Intent(this, typeof(ActivityA));
intent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
StartActivity(intent);
Das alles funktioniert gut. Das Problem tritt auf, wenn Aktivität C keine Daten zurückgeben möchte. Wenn ich für Aktivität C aufrufen und dann versuchen, SetResult(Result.Ok, intent);
für Aktivität B aufzurufen, werden diese Werte von Aktivität B nie an Aktivität A zurückgegeben. Sie verwendet immer noch die leeren Daten von Aktivität C, obwohl ich SetResult() nie aufgerufen habe Aktivität C.
Untere Zeile. Wie kann ich Aktivität B erhalten, um nach dem Starten von Aktivität C und Zurückkehren zu Aktivität B die richtigen Daten zurückzugeben?
Wenn Sie Aktivität B und Aktivität C beginnen , verwenden Sie StartActivityForResult wie hier beschrieben? https://developer.xamarin.com/recipes/android/fundamentals/activity/start_activity_for_result/ Ich würde denken, dass, wenn Sie beginnen B von A mit StartActivityForResult, und starten Sie C von B mit dem gleichen, wenn Sie das Ergebnis zurück erhalten C in B stellt dann das Ergebnis von B ein, damit es wieder auf A geht, ich würde denken, dass das funktionieren sollte. Ich sehe nicht, dass Sie StartActivityForResult überall verwenden. – jgoldberger
Ich habe diesen Code weggelassen. Aktivität A startet Aktivität B für Ergebnis. Deshalb funktioniert 'SetResult()' überhaupt. Das Starten der Aktivität C für das Ergebnis und das Verwenden von 'ActivityFlags.ForwardResult' löst eine Ausnahme aus ... – JacobK