FirstActivity.Java
hat ein FragmentA.Java
was anruft startActivityForResult()
.
SecondActivity.Java
Anruffinish()
aber onActivityResult
niemals angerufen werden, was geschrieben steht FragmentA.Java
.
FragmentA.Java
Code:
@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
Code:
@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();
}
Ich habe versucht, den Code zu debuggen, werde aber onAcitvityResult()
nie aufgerufen.
android
android-fragmentactivity
Herr Roshan Pawar
quelle
quelle
Antworten:
Sie müssen schreiben
onActivityResult()
in IhremFirstActivity.Java
wie folgtDas nennt also dein Fragment
onActivityResult()
Edit: die Lösung zu ersetzen ,
getActivity().startActivityForResult(i, 1);
mitstartActivityForResult(i, 1);
quelle
onActivityresult()
vonFirstAcivity.Java
wird aufgerufen undonActivityresult()
von wirdFragmentA.Java
nie aufgerufen. Bitte helfen Sie.startActivityForResult
statt zu verwendengetActivity().start...
? Denn soweit ich sehen kann, überschreiben Sie die Definition vononActivityResult
mit einer eigenen Definition in der Aktivität (dh dies verhält sich genauso, als ob die Überschreibung in der Antwort nicht vorhanden wäre).Kevins Antwort funktioniert, aber es macht es schwierig, mit den Daten dieser Lösung zu spielen.
Die beste Lösung ist, nicht
startActivityForResult()
auf Aktivitätsebene zu beginnen.in deinem Fall ruf nicht an
getActivity().startActivityForResult(i, 1);
Verwenden
startActivityForResult()
Sie stattdessen einfach und es wird einwandfrei funktionieren! :) :)quelle
Sie müssen onActivityResult () wie folgt in FirstActivity.Java schreiben
Dies löst die onActivityResult-Methode für Fragmente in FirstActivity.java aus
quelle
Das Fragment hat bereits
startActivityForResult
, wasonActivityResult
das Fragment aufrufen würde, wenn Sie es verwenden, anstattgetActivity()
...quelle
Das Wichtigste, was hier alles fehlt, ist ... Der Startmodus von FirstActivity muss singleTop sein. Wenn es sich um singleInstance handelt, wird das onActivityResult in FragmentA direkt nach dem Aufruf der startActivityForResult-Methode aufgerufen. Es wird also nicht auf den Aufruf der Methode finish () in SecondActivity warten.
Gehen Sie also die folgenden Schritte durch: Es wird definitiv funktionieren, da es nach langer Recherche auch für mich funktioniert hat.
Machen Sie in der Datei AndroidManifest.xml launchMode von FirstActivity.Java zu singleTop.
Überschreiben Sie in FirstActivity.java die onActivityResult-Methode. Da dies das onActivityResult von FragmentA aufruft.
Überschreiben Sie in FragmentA.Java die onActivityResult-Methode
Aufruf
startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);
von FragmentA.JavaRufen Sie die
finish();
Methode in SecondActivity.java aufHoffe das wird funktionieren.
quelle
Wir nennen könnte
startActivityForResult()
direkt aus Fragment So rufen Sie solltenthis.startActivityForResult(i, 1);
stattgetActivity().startActivityForResult(i, 1);
Aktivität sendet das Aktivitätsergebnis an Ihr Fragment.
quelle
Möge es spät für die Antwort sein. Wird aber für jeden hilfreich sein.
In meinem Fall möchte ich Aktivität von Fragment aufrufen und setResult vom Fragment zurücksetzen.
Ich habe getContext von Fragment Like verwendet.
Und Ergebnis aus Fragment setzen
Jetzt Ergebnis zum Fragmentieren mit
quelle
onActivityResult () von MAinActivity wird aufgerufen, onActivityResult () von Fragement wird nicht aufgerufen, da das Fragment in Activity platziert ist, sodass es offensichtlich zu MainActivity zurückkehrt
quelle
Rufen Sie nicht
finish()
inonCreate()
Verfahren dann funktioniert es gut.quelle
Rufen Sie Ihre
onActivityresult()
in ParentActivity an.quelle