Je démarre le Activity
(descendant de PreferenceActivity
) de mon activité de travailleur comme suit:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
MyConfigure
la classe n'a PAS d' setResult()
appels. En fait, la MyConfigure
classe n'a pas de code sauf OnCreate()
là où elle charge les préférences en utilisant addPreferencesFromResource
.
Maintenant onActivityResult
est appelé avec requestCode
de 1458
prématurément, juste après l' MyConfigure
exécution de l'activité. Testé sur les émulateurs 1.6 et 2.1 ainsi que sur les appareils 2.1. Y a-t-il un appel à setResult()
enterré quelque part PreferenceActivity
? Ou comment expliquer autrement cet appel prématuré?
android
android-activity
Rappel d'Eugene Mayevski
la source
la source
Réponses:
Ceci est résolu en changeant le mode de lancement en
singleTop
:Il y a un bogue / fonctionnalité (?) Dans Android, qui signale immédiatement le résultat (qui n'a pas encore été défini) pour
Activity
, déclaré commesingleTask
(malgré le fait que l'activité continue de s'exécuter). Si nous changeonslaunchMode
l'activité parent desingleTask
àsingleTop
, tout fonctionne comme prévu - le résultat n'est signalé qu'une fois l'activité terminée. Bien que ce comportement ait une certaine explication (une seulesingleTask
activité peut exister et il peut y avoir plusieurs serveurs pour cela), ce n'est toujours pas une restriction logique pour moi.la source
J'ai résolu mon problème après la suppression
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
avant d'appelerfragment.startActivityForResult(intent, 0);
.la source
Je viens de supprimer tous mes "android: launchMode" personnalisés de mon activité et tout a fonctionné comme un charme. Ce n'est pas une bonne idée de changer cela lorsque vous ne savez pas exactement ce qu'Android comprend ... Android est un peu délicat de cette façon.
la source
Cela m'est arrivé lorsque l'intention avait
Intent.FLAG_RECEIVER_FOREGROUND
défini le drapeau.(Oui, ce drapeau n'est pas lié à l'activité, mais je l'avais à toutes mes intentions dans le cadre d'une solution de fusil de chasse à un problème différent .)
la source
Encore une fois, comme dans le commentaire de Mayra, cela
setResult()
n'a rien à voir avec votre problème. pour une raison quelconque, laMyConfigure
classe se termine d'elle-même et quand cela se produitPreferenceActivity
suppose simplement qu'il pourrait y avoir un résultatMyConfigure
parce que c'est ainsi que vous avez écrit le code.cela se produit également lorsque vous forcez une activité qui a commencé avec
startActivityForResult()
...Donc, je pense qu'il vaut mieux se concentrer sur les raisons pour lesquelles votre
MyConfigure
cours est terminé de force.la source