android - savedinstancestate - onActivityResult() llamado prematuramente
onstart android example (5)
Comienzo la 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
clase MyConfigure
NO tiene ninguna setResult()
. De hecho, la clase MyConfigure
no tiene ningún código excepto OnCreate()
donde carga preferencias usando addPreferencesFromResource
.
Ahora se llama onActivityResult
con requestCode
of 1458
prematuramente, justo después de MyConfigure
actividad MyConfigure
. Probado en 1.6 y 2.1 emuladores, así como 2.1 dispositivo. ¿Hay alguna llamada a setResult()
enterrada en algún lugar de PreferenceActivity
? ¿O cómo se puede explicar esta llamada prematura?
Acabo de eliminar todo mi "android: launchMode" personalizado de mi actividad y todo funcionó como un amuleto. No es una buena idea cambiar esto cuando no se sabe EXACTAMENTE qué es lo que Android está entendiendo ... Android es un poco complicado de esta manera.
De nuevo, como en el comentario de Mayra, setResult()
no tiene nada que ver con su problema. por alguna razón, la clase MyConfigure
termina y cuando sucede PreferenceActivity
solo asume que podría haber un resultado de MyConfigure
porque así es como escribiste el código.
esto también ocurre cuando fuerza cualquier actividad que haya comenzado con startActivityForResult()
...
Por lo tanto, creo que es mejor centrarse en por qué su clase MyConfigure
se termina a la fuerza.
Esto me sucedió cuando el intento tenía el indicador Intent.FLAG_RECEIVER_FOREGROUND
establecido.
(Sí, esa bandera no está relacionada con la actividad, pero la tuve en todos mis intentos como parte de una solución de escopeta para un problema diferente ).
Esto se soluciona cambiando el modo de singleTop
a singleTop
:
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
Hay un error / función (?) En Android, que informa inmediatamente el resultado (que aún no se ha establecido) para Activity
, declarado como singleTask
(a pesar de que la actividad continúa ejecutándose). Si cambiamos launchMode
de la actividad principal de singleTask
a singleTop
, todo funciona como se espera: el resultado se informa solo después de que la actividad finaliza. Si bien este comportamiento tiene cierta explicación (solo puede existir una actividad singleTask
y puede haber varios servidores para ella), esta sigue siendo una restricción no lógica para mí.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mi problema después de eliminar intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
antes de llamar a fragment.startActivityForResult(intent, 0);
.