android android-fragments android-activity restart

android: configChanges="orientation" no funciona con fragmentos



android-fragments android-activity (8)

Solo intento adaptar algunas de mis aplicaciones para HoneyComb.

El problema que estoy enfrentando es la destrucción de mi actividad en el cambio de orientación (paisaje / retrato)

Cuando estaba usando una actividad clásica, escribí en el manifiesto:

¡Pero ahora, todas estas líneas ya no funcionan!

¿Hay alguna solución para eso?

Mi código:

<activity android:name=".TwitterActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation" /> <activity android:name=".TwitterActivity$AppListFragment" android:configChanges="keyboardHidden|orientation" />


A partir de Android 3.2 (nivel de API 13), el "tamaño de pantalla" también cambia cuando el dispositivo cambia entre la orientación vertical y horizontal. Por lo tanto, si desea evitar que se reinicie el tiempo de ejecución debido al cambio de orientación cuando se desarrolla para API nivel 13 o superior (según lo declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor "screenSize" además del valor de "orientación". Es decir, debe descartar android: configChanges = "orientation | screenSize". Sin embargo, si su aplicación se dirige al nivel API 12 o inferior, su actividad siempre maneja esta configuración por sí misma (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo con Android 3.2 o superior).


En archivo Manifiesto, dentro de actividad agregue esta línea
android: configChanges = "teclado | tecladoHidden | orientación | tamaño de pantalla".


Estaba teniendo el mismo problema (es decir, la actividad reiniciando) incluso sin fragmentos.

Cambié:

android:configChanges="orientation|keyboardHidden"

a:

android:configChanges="orientation|keyboardHidden|screenSize"

Eso evita que la actividad se reinicie.


Hasta API 13 había un nuevo valor para el atributo screenSize , screenSize

Entonces, si está usando pantallas grandes, asegúrese de agregar screenSize en su atributo configChanges:

android:configChanges="orientation|keyboardHidden|screenSize"


Sé que esta es una respuesta bastante tardía, pero recientemente me enfrenté a este problema y pude resolver esto para la Actividad de Fragmentos.

1) En Manifiesto,

android:configChanges="orientation|keyboardHidden|screenSize"

2) En el archivo Class, anule el onSaveInstanceState (Bundle outState). ¡Eso es! Disfruta :)


Según mi experiencia con Honeycomb 3.0 y la biblioteca de compatibilidad (r1).

configChange="orientation" funciona con fragmentos con respecto a evitar que la actividad (a la que se aplica) se vuelva a crear en un cambio de orientación. Si desea que el fragment no se vuelva a crear en la recreación de actividades, llame a setRetainInstance en onCreate .

A menos que me falta algo, no obtengo la segunda entrada de manifiesto, ¿no es AppListFragment un Fragment ? Si es así, ¿por qué aparece como una entrada en su manifiesto?

Vea SO Answer para nuevos calificadores que probablemente lo estén causando si está apuntando a sdk 13, sugiera intentar con android:configChanges="orientation|screenSize"


Tuve un problema muy similar, pero tuve que hacer un par de adiciones para que funcionara con varias versiones (incluido ICS).

En la actividad principal de la aplicación agregué una versión ligeramente diferente de lo que Jason ofreció.

<activity android:name=".MyMainActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" >

Tenía esto trabajando en pre-Honeycomb con:

<activity .... android:configChanges="orientation|keyboardHidden" .... >

Tuve que hacer el primer ejemplo para ejecutarlo en todas las versiones. Actualmente estoy usando fragmentos y ActionBarSherlock para compatibilidad con versiones anteriores.

También cambié la forma en que estaba guardando y recargando:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Set up webview object View v = inflater.inflate(R.layout.webview_layout, container, false); webview = (WebView)v.findViewById(R.id.webview_fragment); webview.getSettings().setJavaScriptEnabled(true); // Check to see if it has been saved and restore it if true if(savedInstanceState != null) { if (savedInstanceState.isEmpty()) Log.i(tag, "Can''t restore state because bundle is empty."); else { if (webview.restoreState(savedInstanceState) == null) Log.i(tag, "Restoring state FAILED!"); else Log.i(tag, "Restoring state succeeded."); } } else { // Load web page webview.setWebViewClient(new MyWebViewClient()); webview.getSettings().setPluginsEnabled(true); webview.getSettings().setBuiltInZoomControls(false); webview.getSettings().setSupportZoom(false); webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webview.getSettings().setAllowFileAccess(true); webview.getSettings().setDomStorageEnabled(true); webview.loadUrl(mTabURL); } return v; }

El código para el método de estado de la instancia de guardar:

@Override public void onSaveInstanceState(Bundle outState) { if(webview.saveState(outState) == null) Log.i(tag,"Saving state FAILED!"); else Log.i(tag, "Saving state succeeded."); }

Espero que esto ayude.


Agregue esto a Manifeast.Xml

<android:configChanges="orientation|screenSize" >

Es un trabajo para ti