2011-05-17 10 views
6

Entiendo bastante bien sobre el ciclo de vida de Android. Publico aquí porque he observado un comportamiento extraño, de todos modos, este es mi propio pensamiento.Android retiene el estado de devolución de llamada después del cambio de configuración

Mi caso es como esto: una actividad utilizará un diseño simple con solo un EditText. En el método de actividad onCreate, configuro un texto predeterminado en EditText y en una parte posterior del método, asigno un TextWatcher al EditText para que cada vez que el usuario escriba algo, pueda responder a mi manera.

Todo está bien hasta que gire la pantalla. La devolución de llamada TextWatcher comienza a reaccionar contra el código que inicializa el EditText.

De acuerdo con el flujo de código normal, el TextWatcher se asigna más adelante después de inicializar el valor de texto del EditText. por lo que no se debe disparar debido a la asignación de texto en el método onCreate.

¿Alguien podría explicar esto?

Respuesta

1

Cuando cada vez que gira el dispositivo el método onCreate de la actividad llamada again.If desea evitar llamar onCreate al girar el dispositivo de hacer el código siguiente en el Manifiesto

android:configChanges="orientation|keyboardHidden" 

y en su actividad

public void onConfigurationChanged(Configuration newConfig) 
{  
    super.onConfigurationChanged(newConfig);  

    if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) 
    { 

    }  
    else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT) 
    { 

    } 
} 
+0

con el sistema Android: ConfigChanges es suficiente, solo necesita el código de su actividad si desea hacer algo específico – yeradis

7

Aquí es por eso que ver este comportamiento:

  1. Cuando método 'onCreate' es llamada ed primera vez, no tiene un estado guardado. Lo que significa que el parámetro BundlesavedInstanceState es nulo.
  2. Cuando se cambia la configuración, Android traza el valor no nulo en el parámetro savedInstanceState.
  3. Después de que se cambia la configuración y onCreate regresa, Android llama al onRestoreInstateState.
  4. De forma predeterminada, todas las vistas que tienen id están tratando de restaurar su estado, EditText restaura su estado también (en realidad, TextView que restaura la mayor parte).
  5. En algún lugar durante la restauración del estado (pero después de que se haya completado el método onCreate) su control EditText llama al setText para restaurar el texto que tenía justo antes de que se cambiara la configuración.
  6. Su nuevoTextWatcher que ha agregado en onCreate método se le notifica sobre este cambio.

Sólo para dejar esto claro, su edad TextWatcher, que agregó en primera convocatoria a onCreate, no se conserva! Es nuevo TextWatcher, que se agregó en la última llamada al onCreate, que recibe la notificación de cambio de texto.

Puede examinar TextView.onRestoreInstanceState usted mismo.

Cuestiones relacionadas