FirstActivity.Java
a un FragmentA.Java
qui appelle startActivityForResult()
.
SecondActivity.Java
appeler finish()
mais onActivityResult
ne jamais être appelé ce qui est écrit 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 je n'ai onAcitvityResult()
jamais été appelé.
android
android-fragmentactivity
M. Roshan Pawar
la source
la source
Réponses:
Vous devez écrire
onActivityResult()
dans votreFirstActivity.Java
comme suitDonc cela appellera votre fragment
onActivityResult()
Edit: la solution est de remplacer
getActivity().startActivityForResult(i, 1);
parstartActivityForResult(i, 1);
la source
onActivityresult()
d'FirstAcivity.Java
est appelé etonActivityresult()
deFragmentA.Java
ne sont jamais appelé. Veuillez aider.startActivityForResult
au lieu degetActivity().start...
? Parce que pour autant que je puisse voir, vous remplacez la définition deonActivityResult
avec sa propre définition, dans l'activité (c'est-à-dire que cela se comporte exactement comme si le remplacement dans la réponse n'existait pas).La réponse de Kevin fonctionne, mais il est difficile de jouer avec les données en utilisant cette solution.
La meilleure solution est de ne pas commencer
startActivityForResult()
au niveau d'activité.dans ton cas n'appelle pas
getActivity().startActivityForResult(i, 1);
Au lieu de cela, utilisez simplement
startActivityForResult()
et cela fonctionnera parfaitement! :)la source
Vous devez écrire onActivityResult () dans votre FirstActivity.Java comme suit
Cela déclenchera la méthode onActivityResult des fragments sur FirstActivity.java
la source
Le fragment a déjà
startActivityForResult
, ce qui appelleraitonActivityResult
le fragment si vous l'utilisez, au lieu degetActivity()
...la source
La chose la plus importante, qui manque ici, c'est ... Le launchMode de FirstActivity doit être singleTop. S'il s'agit de singleInstance, onActivityResult dans FragmentA sera appelé juste après l'appel de la méthode startActivityForResult. Donc, il n'attendra pas l'appel de la méthode finish () dans SecondActivity.
Alors passez par les étapes suivantes, cela fonctionnera certainement comme cela a fonctionné pour moi aussi après une longue recherche.
Dans le fichier AndroidManifest.xml, définissez launchMode de FirstActivity.Java en tant que singleTop.
Dans FirstActivity.java, remplacez la méthode onActivityResult. Comme cela appellera le onActivityResult de FragmentA.
Dans FragmentA.Java, remplacez la méthode onActivityResult
Appel
startActivityForResult(intent, HOMEWORK_POST_ACTIVITY);
de FragmentA.Javafinish();
Méthode d' appel dans SecondActivity.javaJ'espère que cela fonctionnera.
la source
Nous pourrions appeler
startActivityForResult()
directement à partir de Fragment donc vous devriez appelerthis.startActivityForResult(i, 1);
au lieu degetActivity().startActivityForResult(i, 1);
L'activité enverra le résultat de l'activité à votre fragment.
la source
Qu'il soit tard pour la réponse. Mais sera utile pour n'importe qui.
Dans mon cas, je veux appeler l'activité de Fragment et setResult à partir du fragment.
J'ai utilisé getContext de Fragment Like.
Et définir le résultat du fragment
Obtenir maintenant le résultat du fragment avec
la source
onActivityResult () de MAinActivity appellera, onActivityResult () de Fragement n'appellera pas parce que le fragment est placé dans Activity donc évidemment il reviendra à MainActivity
la source
Ne pas appeler
finish()
enonCreate()
méthode il fonctionne très bien.la source
appelez votre
onActivityresult()
dans ParentActivity.la source