92 votes

onActivityResult() appelé prématurément

Je commence l'activité (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() appelle. 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 (), enfouie quelque part dans PreferenceActivity? Ou sinon, comment cela peut-il prématuré d'appel être expliqué?

251voto

Il y a un bug / feature (?) dans Android, qui rend compte immédiatement au résultat (qui n'a pas été encore fixé) pour l'activité, a déclaré que singleTask (malgré le fait que l'activité continue de fonctionner). Si nous changeons launchMode de l'activité parent de singleTask à 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 seul singleTask activité peut exister et il peut se produire plusieurs serveurs pour elle), c'est encore un pas de restriction logique pour moi.

4voto

J’ai juste enlevé tous mes personnalisé « android : launchMode » de mon activité et tout a fonctionné comme un charme. Il n’est pas une bonne idée cela change quand vous ne savez pas exactement ce que Android est de comprendre... Android est un peu délicat de cette façon.

-1voto

optimystery Points 64

encore une fois comme commentaire de Mayra, setResult() n’a rien à voir avec votre problème. pour une raison quelconque, MyConfigure classe finit lui-même et quand il arrive que preferenceactivity suppose simplement qu’il pourrait y avoir un résultat de MyConfigure parce que c’est comment vous avez écrit le code.

Cela se produit également lorsque vous forcez retour toute activité qui commence par startAcitivityForResult()...

donc, je pense que c' est mieux de se concentrer sur les raisons de votre classe de MyConfigure est forcely terminé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X