EditText no guardado automáticamente en el cambio de orientación de la pantalla

He leído que Android guarda automáticamente el contenido de objetos EditText cuando una aplicación está a punto de ser detenido o matado. Sin embargo, en mi aplicación el contenido de un EditText se pierde cuando cambia la orientación de la pantalla.

¿Es un comportamiento normal? ¿Entonces tengo que guardar / restaurar manualmente su contenido con onSaveInstanceState / onRestoreInstanceState ? ¿O hay un método más fácil para decirle a Android que lo guarde y lo restaure?

Editar :

Crear el objeto EditText programación, no en XML. Esto resulta estar relacionado con el problema (ver la respuesta aceptada a continuación).

Esto no es un comportamiento normal.

En primer lugar, asegúrese de que tiene identificados asignados a los controles EditText en el XML de presentación.

Editar 1: Sólo necesita un ID, período. Si está haciendo esto mediante programación, perderá estado a menos que tenga un ID.

Así que usar esto como un ejemplo rápido y sucio:

  // Find my layout LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.ll1); // Add a new EditText with default text of "test" EditText testText = new EditText(this.getApplicationContext()); testText.setText("test"); // This line is the key; without it, any additional text changes will // be lost on rotation. Try it with and without the setId, text will revert // to just "test" when you rotate. testText.setId(100); // Add your new EditText to the view. mLinearLayout.addView(testText); 

Eso resolverá su problema.

Si esto falla, necesitará guardar y restaurar el estado.

Anular onSaveInstanceState como así:

 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("textKey", mEditText.getText().toString()); } 

Y luego restaurar en OnCreate :

 public void onCreate(Bundle savedInstanceState) { if(savedInstanceState != null) { mEditText.setText(savedInstanceState.getString("textKey")); } } 

Además, no utilice android:configChanges="orientation" para tratar de lograr esto, es el camino equivocado.

La manera más fácil que encontré para guardar un objeto en onSaveInstanceState es implementar serializable y poner en bundle

 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("myObj", myObj); } 

Donde la clase myObj implementa el método serializable y onCreate ()

 if (savedInstanceState != null && savedInstanceState.getSerializable("myObj") != null) { myObj = ((MyObj) savedInstanceState.getSerializable("myObj")); } 

¿Podrías usar android:freezesText="true" en el diseño xml?

Una posible causa es que anulas onSaveInstanceState pero te olvidas de llamar igual para superclase

Super.onSaveInstanceState (outState);

El estado de todas las vistas en la actividad se guarda automáticamente A MENOS que se sobreponga a esta funcionalidad. Incluso si esto es obvio, los errores son posibles.

  • Pasar datos entre fragmentos
  • Renombrar nombre del paquete jar
  • deshabilitar el paquete que instala mediante programación
  • Android: ¿Cómo pasar el objeto Parcelable a la intención y el uso getParcelable método de paquete?
  • ¿Cuál es el uso de LOCAL_MODULE_TAGS?
  • GetExtra de Intent lanzado desde un objeto pendingIntent
  • ¿Cuál es la diferencia entre un paquete y un intento?
  • Mostrar mensaje después de instalar el paquete
  • ¿Es posible distribuir una clase genérica?
  • Nombre de paquete alias o apodo
  • Diferencia entre getExtras (nombre) .getString y getIntent (). GetStringExtra (nombre)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.