W moim przykładzie mam 3 klasy: klasa A, główna aktywność. Klasa A wywołuje startActivityForResult:
Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");
Klasa B, ta klasa to TabActivity:
Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...
Klasa C, ta klasa jest normalną działalnością:
Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();
onActivityResult jest wywoływany w klasie A, ale wynik jest kodem RESULT_CANCELED
zamiast, RESULT_OK
a zwrócona wartość zamiaru ma wartość null. Jak mogę zwrócić coś z działania w TabHost?
Zdaję sobie sprawę, że problem polega na tym, że moja klasa C faktycznie działa w klasie B, a klasa B wraca z RESULT_CANCELED
powrotem do klasy A. Po prostu nie znam jeszcze rozwiązania.
źródło
http://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/
Z niewielką modyfikacją „param_result”
źródło
setResult
było najważniejsze. Ustaw to na coś lub na przykład wartośćRESULT_OK
i możesz już iść;setResult(RESULT_OK);
. Pomógł mi, +1Zamiar.FLAG_ACTIVITY_FORWARD_RESULT?
źródło
Możesz zaimplementować onActivityResult również w klasie B i uruchomić klasę C za pomocą startActivityForResult. Gdy uzyskasz wynik w klasie B, ustaw tam wynik (dla klasy A) na podstawie wyniku z klasy C. Nie wypróbowałem tego, ale myślę, że to powinno zadziałać.
Inną rzeczą, na którą należy zwrócić uwagę, jest to, że Działanie A nie powinno być działaniem typu single Instance. Aby funkcja startActivityForResult działała, klasa B musi być działaniem podrzędnym działania A i nie jest to możliwe w przypadku działania w pojedynczej instancji, nowe działanie (klasa B) rozpoczyna się od nowego zadania.
źródło
Aby rozpocząć działanie 2 od działania 1 i uzyskać wynik, możesz użyć startActivityForResult i zaimplementować onActivityResult w działaniu 1, a następnie użyć setResult w działaniu 2.
źródło