Por lo general, cuando la vista de la IU no mantiene su estado, lo primero que debe verificar es que esta vista de IU tiene una identificación asignada. Sin este ID, las vistas no pueden restaurar su estado.
<EditText android:id="@+id/text" ... />
Si esto no ayuda, es necesario guardar y restaurar el estado mismo. Eche un vistazo al Handling Runtime Changes. Es más o menos explica lo que debe hacer:
Para manejar adecuadamente un reinicio, es importante que su actividad restaura su estado anterior a través del ciclo de vida de la actividad normal, en el que Android llamadas onSaveInstanceState()
antes de que destruya su actividad de manera que se puede guardar datos sobre el estado de la aplicación. Luego puede restaurar el estado durante onCreate()
o onRestoreInstanceState()
. Para probar que su aplicación se reinicia con el estado de la aplicación intacto, debe invocar los cambios de configuración (como cambiar la orientación de la pantalla) mientras realiza varias tareas en su aplicación.
Debe anular onSaveInstanceState()
y guardar su estado Acitivity cuando su llamada:
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
Y luego restaurar el estado en onCreate()
o onRestoreInstanceState()
:
public void onCreate(Bundle savedInstanceState)
{
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
Si esto no es todavía suficiente, puede anular onRetainNonConfigurationInstance()
y devolver cualquier objeto personalizado que será pa ssed al nuevo objeto de actividad, cuando se recrea. Se pueden encontrar más detalles sobre cómo usarlo en Handling Runtime Changes. Pero esta función está en desuso en Android 3.0+ (específicamente para FragmentActivity
donde es su final). Entonces esto no se puede usar junto con los Fragmentos (lo cual está bien, tienen su mecanismo para retener objetos a través de los cambios de configuración).
Y la última - nunca use android:configChanges
. Debe tener muy buenas razones para usarlo, y generalmente estos son motivos de rendimiento. No estaba destinado a ser abusado de la manera que es ahora: solo para prevenir el reinicio del estado de la IU. Si se utiliza este atributo, entonces sí, la IU de actividad no se volverá a configurar en el cambio de configuración, pero el estado de Actividad aún se restablecerá cuando se destruya y vuelva a crearse más tarde.
La documentación explica esta opción bastante bien:
Nota: La capacidad cambiar la configuración usted mismo puede hacer que sea mucho más difícil de usar recursos alternativos, debido a que el sistema no aplicará automáticamente para usted. Esta técnica debe ser considerado un último recurso y no se recomienda para la mayoría de aplicaciones
De acuerdo, parece un enfoque mucho mejor. Puedo usar esto para el mapa de bits en su lugar, y luego el texto de edición no será un problema. Pero, ¿qué función usaría para guardar el estado de la imagen? – Sebastian
Si el mapa de bits se guarda en el disco, simplemente guarde la ruta al mapa de bits en la función 'onSaveInstanceState()'. Si el mapa de bits está en la memoria, puede usar 'onRetainNonConfigurationInstance()'. – inazaruk