onActivityResult() appelée prématurément
Je commence le Activity
(descendant de PreferenceActivity
) de mon travailleur de l'activité 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
classe n'a PAS de setResult()
appels. En fait, MyConfigure
classe n'ont pas de code, sauf OnCreate()
où il se charge en utilisant les préférences addPreferencesFromResource
.
Maintenant onActivityResult
est appelée avec requestCode
de 1458
prématurément, juste après MyConfigure
activité est exécutée. Testé sur 1.6 et 2.1 émulateurs ainsi que 2.1 de l'appareil. Est-il un appel à setResult()
enterré quelque part dans PreferenceActivity
? Ou sinon, comment cela peut-il prématuré d'appel être expliqué?
- Une activité ne s'arrête pas sur setResults(), elle se termine sur finish(). Pouvez-vous montrer la méthode onCreate de votre MyConfigure activité?
- Le droit, il ne l'est pas. Cependant, quelque chose n'a appel setResult() à l'avance et je me demande ce que c'est. Le code de onCreate est trivial: public class MyConfigure s'étend PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R. xml.préférences); } }
- comment pensez-vous de savoir que setResult est appelé?
- C'est exactement ce que j'ai créé le question pour. À savoir, pourquoi onActivityResult est appelé prématurément.
- Quel est le logcat de sortie-dire autour de cette période? Plus précisément le "ActivityManager" de la balise, qui montre les Intentions sont appelés.
- Est ce que quelqu'un d'autre rencontre ce problème lorsque les deux activités (celui qui lance et celui qui est en cours de lancement) sont singleTop? Je suis juste l'expérience et aura probablement besoin de coder en dur quelque chose dans la lancée de l'activité - alors laissez-moi savoir si quelqu'un a trouvé quelque solution de contournement (travail sur Android 4.2.2 sur la Nexus 7).
Vous devez vous connecter pour publier un commentaire.
Ce problème est résolu en changeant le mode de lancement de
singleTop
:Il y a un bug /feature (?) dans Android, qui rend compte immédiatement au résultat (qui n'a pas été encore fixé) pour
Activity
, a déclaré quesingleTask
(malgré le fait que l'activité continue de fonctionner). Si nous changeonslaunchMode
de l'activité parent desingleTask
àsingleTop
, tout fonctionne comme prévu, le résultat est rapporté qu'après l'activité est terminée. Bien que ce comportement a certaines explications (un seulsingleTask
activité peut exister et il peut se produire plusieurs serveurs pour elle), c'est encore un pas de restriction logique pour moi.J'ai résolu mon problème, après le retrait des
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
avant d'appelerfragment.startActivityForResult(intent, 0);
.J'ai supprimé tous mes personnalisé "android:launchMode" 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 que Android est de comprendre... Android est un peu délicat de cette façon.
Ce qui m'est arrivé lorsque l'intention de l'
Intent.FLAG_RECEIVER_FOREGROUND
drapeau.(Oui, le drapeau n'est pas liés à l'activité, mais je l'ai eu sur toutes mes intentions dans le cadre d'un fusil de chasse de solution à un autre problème.)
Là encore, comme dans Mayra commentaire,
setResult()
n'a rien à voir avec votre problème. pour une raison quelconque,MyConfigure
cours se termine lui-même et quand il arrivePreferenceActivity
juste suppose qu'il pourrait être un résultat deMyConfigure
parce que c'est la façon dont vous avez écrit le code.cela se produit également lorsque vous force à toute activité c'est commencé avec
startActivityForResult()
...Donc, je pense qu'il est préférable de se concentrer sur les raisons de votre
MyConfigure
classe est force fini.