FirstActivity.Java
Hat einen FragmentA.Java
, Der startActivityForResult()
aufruft. SecondActivity.Java
Rufe finish()
auf, aber onActivityResult
wird nie aufgerufen, was in FragmentA.Java
Geschrieben ist.
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, aber onAcitvityResult()
wird nie aufgerufen.
Sie müssen onActivityResult()
in Ihren FirstActivity.Java
Wie folgt schreiben
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
Das ruft also das onActivityResult()
Ihres Fragments auf.
Edit: Die Lösung besteht darin, getActivity().startActivityForResult(i, 1);
durch startActivityForResult(i, 1);
zu ersetzen.
Kevins Antwort funktioniert, aber mit dieser Lösung ist es schwierig, mit den Daten zu spielen.
Die beste Lösung ist, startActivityForResult()
nicht auf Aktivitätsebene zu starten.
in deinem Fall rufe nicht getActivity().startActivityForResult(i, 1);
auf
Verwenden Sie stattdessen einfach startActivityForResult()
und es wird einwandfrei funktionieren! :)
Sie müssen onActivityResult () in FirstActivity.Java wie folgt schreiben
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
Dies löst die onActivityResult-Methode von Fragmenten in FirstActivity.Java aus
Das Fragment hat bereits startActivityForResult
, das onActivityResult
im Fragment aufruft, wenn Sie es verwenden, anstelle von getActivity()
...
Das Wichtigste, was hier alles fehlt, ist ... Der launchMode von FirstActivity muss singleTop sein. Wenn es sich um singleInstance handelt, wird das onActivityResult in FragmentA direkt nach dem Aufrufen der startActivityForResult-Methode aufgerufen. Es wird also nicht auf den Aufruf der finish () -Methode in SecondActivity gewartet.
Gehen Sie also die folgenden Schritte durch. Es wird definitiv funktionieren, wie es auch bei mir nach langer Recherche funktioniert hat.
Erstellen Sie in der Datei AndroidManifest.xml den Startmodus von FirstActivity.Java als singleTop.
<activity
Android:name=".FirstActivity"
Android:label="@string/title_activity_main"
Android:launchMode="singleTop"
Android:theme="@style/AppTheme.NoActionBar" />
Überschreiben Sie in FirstActivity.Java die onActivityResult-Methode. Da dies das onActivityResult von FragmentA aufrufen wird.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
Überschreiben Sie in FragmentA.Java die onActivityResult-Methode
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("FragmentA.Java","onActivityResult called");
}
Rufen Sie startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);
von FragmentA.Java aus auf
Rufen Sie in SecondActivity.Java die Methode finish();
auf
Hoffe das wird funktionieren.
Wir könnten startActivityForResult()
direkt von Fragment aufrufen. Sie sollten also this.startActivityForResult(i, 1);
anstelle von getActivity().startActivityForResult(i, 1);
aufrufen.
Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
this.startActivityForResult(i, 1);
Aktivität sendet das Aktivitätsergebnis an Ihr Fragment.
onActivityResult () von MAinActivity ruft auf, onActivityResult () on Fragment kann nicht aufgerufen werden, da das Fragment in Activity platziert ist und somit offensichtlich zu MainActivity zurückkehrt