J'essaie de définir le résultat après avoir appuyé sur le bouton RETOUR. J'appelle surDestroy
Intent data = new Intent();
setResult(RESULT_OK, data)
Mais quand il s'agit de
onActivityResult(int requestCode, int resultCode, Intent data)
le resultCode est 0 (RESULT_CANCELED) et les données sont «nulles».
Alors, comment puis-je transmettre le résultat de l'activité terminée par le bouton RETOUR?
Activity
result doit être défini avant d'finish()
être appelé. Le fait de cliquer sur RETOUR appelle réellementfinish()
votreactivity
, vous pouvez donc utiliser l'extrait suivant:Si vous appelez
NavUtils.navigateUpFromSameTask();
dansonOptionsItemSelected()
,finish()
est appelé, mais vous obtiendrez le malresult code
. Donc , vous devez appelerfinish()
pasnavigateUpFromSameTask
dansonOptionsItemSelected()
. mauvaise requestCode dans onActivityResultla source
finish
a à voir aveconPause
etonDestroy
? Celles-ci ne sont absolument pas liées, sauf que celafinish
démarre le processus de résiliation dontonPause
etonDestroy
font partie.Si vous souhaitez définir une coutume
RESULT_CODE
enonBackPressed
cas alors vous devez d' abord définir leresult
puis appelezsuper.onBackPressed()
et vous recevrez le mêmeRESULT_CODE
dans l'activité de l' appelantonActivityResult
la méthodela source
J'ai refactoré mon code. Dans un premier temps, je préparais des données et définir comme
activity result
dansonDestroy
(cela ne fonctionne pas). Maintenant, je définis desactivity
données chaque fois que les données à renvoyer sont mises à jour et je n'ai rien dedansonDestroy
.la source
setResult()
, vos données seront perdues.Vous devez remplacer onOptionsItemSelected comme ceci:
la source
Reportez-vous à la documentation onActivityResult (int, int, Intent)
La solution consiste à vérifier le resultCode pour la valeur Activity.RESULT_CENCELED . Si oui, cela signifie que soit PRÉCÉDENT a été pressé, soit l'activité s'est bloquée. J'espère que ça marche pour vous, ça marche pour moi :).
la source
onDestroy
est trop tard dans la chaîne - remplacez plutôtonPause
etisFinishing()
vérifiez si votre activité est à la fin de son cycle de vie.la source
Essayez de remplacer onBackPressed (à partir du niveau Android 5), ou remplacez onKeyDown () et attrapez KeyEvent.BUTTON_BACK (voir Résultats d'activité Android ) Cela fait l'affaire pour moi.
la source
Ne vous fiez à aucune logique exécutée dans onPause d'une activité lorsque vous revenez à la première. Selon la documentation:
Voir http://goo.gl/8S2Y pour plus de détails.
Le moyen le plus sûr est de définir le résultat une fois que chaque opération de modification de résultat est terminée (comme vous le mentionnez dans votre réponse)
la source
Je colle la réponse peut être utile à d'autres personnes: quand un launcheMode réglé avec Android: launchMode = "singleTask" je ne peux pas non plus obtenir le résultat, le doc dit:
et:
la source