android - samsung - porque no gira la pantalla de mi celular
¿Restaurando el estado de TextView después de la rotación de la pantalla? (8)
En mi aplicación tengo TextView
y EditText
. Ambos tienen datos en él. Cuando la orientación de la pantalla cambia, los datos en EditText
permanecen, pero los datos de TextView
se borran.
¿Puede alguien ayudarme a encontrar una forma de retener datos en TextView
también?
1) No todas las vistas con una ID guardan su estado. Los widgets de Android, con una ID, cuyo estado puede ser modificado por el usuario, parecen guardar su estado en una eliminación suave. Así que EditText guarda su estado, pero TextView no guarda su estado en una eliminación suave.
"AFAIK, Android solo molesta al estado de ahorro para cosas que se espera cambien. Es por eso que guarda el texto en un EditText (que un usuario puede cambiar) y quizás no guarda el estado de un TextView (que normalmente permanece estático) ) "
Mark M
Por lo tanto, puede optar por guardar el estado de la vista de texto en onSaveInstanceState y puede optar por restablecer el estado de la vista de texto en onCreate.
2) La mejor práctica es guardar el estado "no interno" de instancia de vista incluso si declara
android:configChanges= "orientation|keyboardHidden"
De los documentos:
"Sin embargo, su aplicación siempre debe poder apagarse y reiniciarse con su estado anterior intacto. No solo porque hay otros cambios de configuración que no puede impedir que reinicie su aplicación, sino también para manejar eventos tales como cuando el usuario recibe un mensaje entrante. llamada telefónica y luego regresa a su aplicación ".
JAL
Añádalos a AndroidManifest.xml
Ponga su nombre de actividad en el lugar de Activity_Name
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
Esto funcionará con un valor que cambia TextField también.
Android no maneja ese tipo de cosas para ti. Has guardado todos los datos manualmente.
Puede usar en una actividad para guardar valores
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
y use algo como esto en el método oncreate de una actividad para cargar los objetos guardados
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
también puede elegir el cambio de orientación de desactivación para una actividad
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Cuando la configuración cambia, Android reinicia su actividad de forma predeterminada. Para cambiar esto, debe anular el onConfigurationChanged()
. Además, debe agregar android:configChanges
a su archivo de manifiesto.
Puedes leer más here .
Modifique sus actividades en AndroidManifest.xml para anular el comportamiento de cambio de orientación al agregar esto a su actividad / actividades:
android:configChanges="orientation|keyboardHidden"
Debería verse algo como esto:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
Para conservar los datos sobre el cambio de orientación, debe implementar los dos métodos:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Read values from the "savedInstanceState"-object and put them in your textview
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// Save the values you need from your textview into "outState"-object
super.onSaveInstanceState(outState);
}
Si desea forzar su TextView
para guardar su estado, debe agregar el atributo freezesText
:
<TextView
...
android:freezesText="true" />
De la documentación sobre freezesText
:
Si se establece, la vista de texto incluirá su texto completo actual dentro de su carámbano congelado además de metadatos como la posición actual del cursor. Por defecto, esto está desactivado; puede ser útil cuando el contenido de una vista de texto no se almacena en un lugar persistente, como un proveedor de contenido
Yo también utilicé
android:configChanges="orientation"
y no funcionó.
Pero luego encontré una solución.
Verifica si tienes la siguiente línea correctamente en tu parte más viril:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
asegúrese de que no lea algo así como
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
Lo tuve de la segunda manera en primer lugar pero cuando lo corregí se conservó el estado.