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?
- Android - ¿Cómo iniciar una aplicación de terceros con el nombre del paquete?
- Android no puede obtener matriz de bytes de la intención
- ¿Cómo obtener el nombre del paquete desde cualquier lugar?
- ¿Cómo usar y empaquetar un archivo JAR con mi aplicación de Android?
- Especificación de un targetPackage para una intención en un archivo XML de un proyecto de biblioteca
Editar :
Crear el objeto EditText
programación, no en XML. Esto resulta estar relacionado con el problema (ver la respuesta aceptada a continuación).
- BroadcastReceiver en las nuevas instalaciones de la aplicación
- Cambiar el nombre del paquete dentro de un APK
- Restaurar historial y página actual al reanudar la visualización web
- Cambiar el identificador del paquete del juego libGDX
- WriteToParcel () no se llama en los cambios de orientación en Android
- ¿Cómo instalar aplicaciones con el mismo nombre de paquete en android?
- ¿Cómo referenciar una cadena de otro paquete en una biblioteca usando XML en Android?
- ¿Cuál debería ser el nombre del paquete de la aplicación Android?
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.
- Com.android.ddmlib.AdbCommandRejectedException: más de un dispositivo
- Desplazamiento del índice de Android