startActivityForResult() à partir d'un Fragment et la finition de l'Activité de l'enfant, à ne pas faire appel onActivityResult() dans le Fragment
FirstActivity.Java
a un FragmentA.Java
qui appelle startActivityForResult()
.
SecondActivity.Java
appel finish()
mais onActivityResult
jamais être appelé pour ce qui est
écrit dans 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();
}
J'ai essayé de déboguer le code, mais onAcitvityResult()
jamais appelée.
- Essayez de le mettre (méthode onActivityResult) dans le FirstActivity classe
- double possible de onActivityResult pas être appelé dans le Fragment
Vous devez vous connecter pour publier un commentaire.
Vous devez écrire
onActivityResult()
dans votreFirstActivity.Java
comme suitCe sera appeler votre fragment de la
onActivityResult()
Edit: la solution est de remplacer
getActivity().startActivityForResult(i, 1);
avecstartActivityForResult(i, 1);
onActivityresult()
deFirstAcivity.Java
est appelée etonActivityresult()
deFragmentA.Java
jamais appelée. S'il vous plaît aider.startActivityForResult
au lieu degetActivity().start...
? Car autant que je peux voir, vous écrasez la définition deonActivityResult
avec sa propre définition, dans l'Activité (c'est à dire le comportement est exactement le même que si le remplacement de la réponse n'existe pas).getActivity()
mais n'était toujours pas d'obtenir le résultat dans le fragment jusqu'à ce que j'ai ajouté lesuper
appel à mon Activité.((Activity) getContext()).startActivityForResult(intent, REQUEST_CODE);
Kevin réponse fonctionne, mais C'est difficile de jouer avec les données à l'aide de cette solution.
Meilleure solution est de ne pas commencer à
startActivityForResult()
sur le niveau d'activité.dans votre cas, ne pas l'appeler
getActivity().startActivityForResult(i, 1);
Au lieu de cela, il suffit d'utiliser
startActivityForResult()
et qu'il fonctionne parfaitement bien! 🙂Vous devez écrire onActivityResult() dans votre FirstActivity.Java comme suit
Cela va déclencher la méthode onActivityResult de fragments de FirstActivity.java
Le fragment a déjà
startActivityForResult
, qui appellentonActivityResult
dans le fragment si vous l'utilisez, au lieu degetActivity()
...La chose la plus importante, que tous sont manque ici, c'est...
Le launchMode de FirstActivity doit être singleTop. Si c'est à instance unique, le onActivityResult dans les FragmentA sera appelé juste après l'appel de la méthode startActivityForResult. Donc, Il n'attendra pas pour vocation de le terminer() la méthode en SecondActivity.
Donc, passer par les étapes suivantes, Il sera certainement le travail que cela a fonctionné pour moi aussi après une longue recherche.
Dans AndroidManifest.xml dossier, de faire des launchMode de FirstActivity.Java comme singleTop.
Dans FirstActivity.java, substituez la méthode onActivityResult. Comme ce qui fera appel à la onActivityResult de FragmentA.
Dans FragmentA.Java, substituez la méthode onActivityResult
Appel
startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);
de FragmentA.JavaAppel
finish();
méthode SecondActivity.javaEspère que cela va fonctionner.
Que l'on pourrait appeler
startActivityForResult()
directement à partir de FragmentDonc, Vous devriez appeler
this.startActivityForResult(i, 1);
au lieu degetActivity().startActivityForResult(i, 1);
De l'activité de l'envoyer à l'Activité Résultat de votre Fragment.
onActivityResult() de MAinActivity appeler , onActivityResult() de Fragement l'habitude de l'appeler parce que le fragment est placé dans l'Activité de toute évidence de revenir à MainActivity
Peut il est en retard pour la réponse. Mais sera utile pour tout le monde.
Dans Mon cas voulez l'appeler activité de Fragment et setResult de retour à partir du fragment.
J'ai utilisé getContext du Fragment Comme.
Et de Définir le Résultat de Fragment
Maintenant d'Obtenir le Résultat de Fragment avec
Ne pas appeler
finish()
dansonCreate()
méthode, puis il fonctionne très bien.appelez votre
onActivityresult()
dans ParentActivity .