Fragments startActivityForResult toujours revenir resultCode 0 et l'intention null sur rappel onActivityResult
J'ai cherché partout et il y a des postes similaires à ce sujet, mais ne peut pas trouver une solution!
Ma situation est que j'ai une Activité qui est titulaire d'un fragment
, et à partir de ce fragment
je veux commencer une nouvelle Activity
B qui doit renvoyer des valeurs de la fragment
.
Sur le fragment
startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
Sur le Activity
B, pour renvoyer les données
Intent returnIntent = new Intent();
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal());
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent);
finish();
Sur le fragment
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode) {
case ConstantsUtils.TOMAP_REQUEST_CODE:
if (resultCode == ConstantsUtils.SUCCESS_RETURN_CODE) {
//do some stuff
}
}
}
onActivityResult
de la fragment
est appelé avec succès, avec le droit requestCode
mais resultCode
est toujours 0 et l'intention est toujours null
.
Je n'ai pas d'autres onActivityResult
mise en œuvre en vertu de Activity
A.
En fait, j'ai aussi essayer de démarrer le activity
de la fragment
avec
getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
et la mise en œuvre de onActivityResult
sur Activity
Un mais il arrive la même chose, droit requestCode
mais mal resultCode
et intent
.
Je suis en utilisant Sherlock Action Bar
donc mon fragment
est un SherlockListFragment
donc je suis en utilisant le support library (r18)
.
Pouvez-vous m'aider? Grâce
super.onActivityResult(requestCode, resultCode, intent);
pour. Il n'est pas nécessaire, à mon avis. Aussi, votre request_code besoin d'être >= 0, comme le mentionne [ici][doc][doc]: developer.android.com/reference/android/app/..., int)super n'est pas nécessaire, j'essayais juste de voir si le problème a cause de ça, mais même résultat si je ne la mets pas. La constante SUCCESS_RETURN_CODE a une valeur de 1, mais la même chose se passe avec l'Activité.RESULT_OK
On dirait que vous appelez
finish()
ailleurs dans ActivityB. L'appel de finish()
sans paramètre le code de résultat et de résultat résultat serait exactement le comportement que vous décrivez. Soit ça, ou ActivityB est en panne, qui ferait la même chose.Puis-je vous conseiller de vérifier l'Activité d'Un, dans
onStart()
ou onResume
partie. Si vous créez une nouvelle instance de l'fragment dans lequel vous avez appelé startActivityForResult
, il serait le problème. Normalement, Android sera automatiquement restaurer l'état précédent, si vous avez une activité B appellent finish()
. J'ai donc créer un autre fragment exemple manuellement, il remplacera celui qui obtenir le retour de l'Intention.OriginalL'auteur nirvik | 2013-08-29
Vous devez vous connecter pour publier un commentaire.
Code de résultat 0 est
RESULT_CANCELLED
.Aussi la raison commune de l'obtention de ce code est le lancement d'une activité dans une nouvelle tâche (vérifiez votre intention manifeste et la pour les drapeaux, qui conduisent le début d'une nouvelle tâche).
Aussi, si vous avez une activité parent, vous devez définir un code de résultat de lui au lieu de définir un code de résultat de son enfant (essayez de
getParent
et si elle n'est pas nulle, que définir un code de résultat).Génial, merci. Le problème pour moi est que j'avais launchMode="singleTask" dans mon manifeste.
pouvez-vous svp m'expliquer comment vous avez résolu votre problème? J'ai besoin d'avoir
launchMode="singleTask"
mais j'aime toujours pour lancer une nouvelle activité.le singleTask mode de lancement est destiné qu'à l'autonome des activités.
OriginalL'auteur esentsov
J'ai passé un peu de temps pour en trouver la raison. Mon erreur a été de mettre
super.onBackPressed()
dans leonBackPress()
méthode.J'ai appelé
finish()
dans la méthode. Mais je pense quesuper.onBackPressed()
fera appel à lafinish()
automatiquement de sorte que vous obtiendrez resultCode 0 toujours.Il suffit donc de retirer le
super.onBackPressed()
ligne dans leonBackPressed()
méthode.OriginalL'auteur Harri Westman