FirstActivity.Java
ma FragmentA.Java
który dzwoni startActivityForResult()
.
SecondActivity.Java
zadzwonić, finish()
ale onActivityResult
nigdy nie dzwonić, co jest napisane FragmentA.Java
.
FragmentA.Java
kod:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// some code
Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
getActivity().startActivityForResult(i, 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
getActivity();
if(requestCode == 1 && resultCode == Activity.RESULT_OK) {
//some code
}
}
SecondActivity.Java
kod:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some code
Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
Próbowałem debugować kod, ale onAcitvityResult()
nigdy nie zostałem wezwany.
android
android-fragmentactivity
Pan Roshan Pawar
źródło
źródło
Odpowiedzi:
Musisz napisać
onActivityResult()
wFirstActivity.Java
następujący sposóbWięc to zadzwoni do twojego fragmentu
onActivityResult()
Edit: rozwiązaniem jest zastąpienie
getActivity().startActivityForResult(i, 1);
zstartActivityForResult(i, 1);
źródło
onActivityresult()
zeFirstAcivity.Java
jest wywoływana ionActivityresult()
odFragmentA.Java
nigdy się nie sprawdził. Proszę pomóż.startActivityForResult
zamiastgetActivity().start...
? Ponieważ z tego, co widzę, zastępujesz definicjęonActivityResult
własną definicją w Działaniu (tj. Zachowuje się to dokładnie tak samo, jakby nadpisanie w odpowiedzi nie istniało).Odpowiedź Kevina działa, ale utrudnia zabawę z danymi przy użyciu tego rozwiązania.
Najlepszym rozwiązaniem jest nie zaczynać
startActivityForResult()
na poziomie aktywności.w twoim przypadku nie dzwoń
getActivity().startActivityForResult(i, 1);
Zamiast tego po prostu użyj
startActivityForResult()
i będzie działać idealnie! :)źródło
Musisz napisać onActivityResult () w swoim FirstActivity.Java w następujący sposób
Spowoduje to wyzwolenie metody onActivityResult fragmentów na FirstActivity.java
źródło
Fragment już ma
startActivityForResult
, co spowoduje wywołanieonActivityResult
fragmentu, jeśli go użyjesz, zamiastgetActivity()
...źródło
Najważniejszą rzeczą, której tu wszystkiego brakuje, jest ... Tryb uruchamiania FirstActivity musi być singleTop. Jeśli jest to singleInstance, onActivityResult w FragmentA zostanie wywołany zaraz po wywołaniu metody startActivityForResult. Nie będzie więc czekać na wywołanie metody finish () w SecondActivity.
Wykonaj więc następujące kroki, na pewno zadziała, ponieważ zadziałało również dla mnie po długich badaniach.
W pliku AndroidManifest.xml ustaw launchMode FirstActivity.Java jako singleTop.
W FirstActivity.java Zastąp metodę onActivityResult. Ponieważ spowoduje to wywołanie onActivityResult z FragmentA.
W FragmentA.Java zastąp metodę onActivityResult
Telefon
startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);
od FragmentA.JavaCall
finish();
w SecondActivity.javaMam nadzieję, że to zadziała.
źródło
Moglibyśmy zadzwonić
startActivityForResult()
bezpośrednio z Fragmentu, więc powinieneś zadzwonićthis.startActivityForResult(i, 1);
zamiastgetActivity().startActivityForResult(i, 1);
Aktywność wyśle Wynik Działania do Twojego Fragmentu.
źródło
Oby było późno na odpowiedź. Ale będzie pomocny dla każdego.
W moim przypadku chcę wywołać aktywność z fragmentu i setResult z powrotem z fragmentu.
Użyłem getContext of Fragment Like.
I ustaw wynik z fragmentu
Teraz pobieranie wyniku do fragmentacji za pomocą
źródło
onActivityResult () z MAinActivity wywoła, onActivityResult () z Fragement nie wywoła, ponieważ fragment jest umieszczony w Activity, więc oczywiście wróci do MainActivity
źródło
Nie nazywaj
finish()
wonCreate()
sposób to działa dobrze.źródło
zadzwoń do swojego
onActivityresult()
w ParentActivity.źródło