Comienzo el Activity
(descendiente de PreferenceActivity
) de mi actividad de trabajador de la siguiente manera:
@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 clase NO tiene ninguna setResult()
llamada. De hecho, la MyConfigure
clase no tiene ningún código excepto OnCreate()
donde carga las preferencias usando addPreferencesFromResource
.
Ahora onActivityResult
se llama con el requestCode
de 1458
antes de tiempo, justo después de MyConfigure
que se ejecuta la actividad. Probado en emuladores 1.6 y 2.1, así como en dispositivos 2.1. ¿Hay una llamada a setResult()
enterrar en algún lugar PreferenceActivity
? ¿O de qué otra manera se puede explicar esta llamada prematura?
android
android-activity
Devolución de llamada de Eugene Mayevski
fuente
fuente
Respuestas:
Esto se soluciona cambiando el modo de lanzamiento a
singleTop
:Hay un error / característica (?) En Android, que informa inmediatamente el resultado (que aún no se ha configurado) para
Activity
, declarado comosingleTask
(a pesar de que la actividad continúa ejecutándose). Si cambiamoslaunchMode
la actividad principal desingleTask
asingleTop
, todo funciona como se esperaba; el resultado se informa solo después de que finaliza la actividad. Si bien este comportamiento tiene cierta explicación (solosingleTask
puede existir una actividad y pueden ocurrir varios esperadores), esta todavía no es una restricción lógica para mí.fuente
Resolví mi problema después de eliminar
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
antes de llamarfragment.startActivityForResult(intent, 0);
.fuente
Acabo de eliminar todos mis "android: launchMode" personalizados de mi actividad y todo funcionó a la perfección. No es una buena idea cambiar esto cuando no sabes EXACTAMENTE lo que está entendiendo Android ... Android es un poco complicado de esta manera.
fuente
Esto me sucedió cuando la intención tenía la
Intent.FLAG_RECEIVER_FOREGROUND
bandera puesta.(Sí, esa bandera no está relacionada con la actividad, pero la tenía en todas mis intenciones como parte de una solución rápida para un problema diferente ).
fuente
Nuevamente como en el comentario de Mayra,
setResult()
no tiene nada que ver con tu problema. por alguna razón, laMyConfigure
clase termina sola y cuando sucedePreferenceActivity
simplemente asume que podría haber un resultado deMyConfigure
porque así es como escribiste el código.esto también sucede cuando fuerza hacia atrás cualquier actividad con la que comenzó
startActivityForResult()
...Entonces, creo que es mejor concentrarse en por qué su
MyConfigure
clase se termina a la fuerza.fuente