Android: configChanges = "orientación" no funciona con fragmentos

Estoy tratando de adaptar algunas de mis aplicaciones para HoneyComb.

El problema que enfrento 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 no funcionan más!

¿Hay una 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" /> 

Basado en mi experiencia con Honeycomb 3.0 y la biblioteca de compatibilidad (r1).

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

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

Vea la respuesta de SO para los nuevos calificadores que es probable ser causa de esto si usted está apuntando sdk 13, sugieren intentar android:configChanges="orientation|screenSize"

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

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

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

Tenía este trabajo en pre-Honeycomb con:

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

Tuve que hacer el primer ejemplo para que funcione en todas las versiones. Actualmente utilizo 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 guardar el método de estado de la instancia:

  @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.

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

Así que si estás usando pantallas grandes asegúrate de añadir screenSize en tu atributo configChanges:

  android:configChanges="orientation|keyboardHidden|screenSize" 

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

Yo estaba teniendo este mismo problema (es decir, la actividad de reiniciar), incluso sin fragmentos.

Cambié:

 android:configChanges="orientation|keyboardHidden" 

a:

 android:configChanges="orientation|keyboardHidden|screenSize" 

Esto evita que la actividad se reinicie.

Sé que esta es una respuesta muy tarde, pero recientemente he enfrentado este problema y fue capaz de resolver esto para Fragment Activity.

1) En Manifiesto,

  android:configChanges="orientation|keyboardHidden|screenSize" 

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

En el archivo de manifiesto, dentro de la actividad, agregue esta línea
Android: configChanges = "teclado | keyboardHidden | orientación | screenSize".

  • Eventos de fragmentos de llamada de la actividad
  • Cómo llamar a fragmento de fragmento?
  • OnCreateOptionsMenu llamado after onResume en JB 4.2
  • Comprender el ciclo de vida de la actividad de los fragmentos
  • No se puede resolver el método 'findViewById (int)' en Fragment
  • ¿Cómo puedo mostrar ProgressDialog usando Fragment
  • ¿Por qué se llama a onCreateView, onCreate, onActivityCreated del fragmento
  • ¿Cómo funciona la api addSharedElement que se agregó a FragmentTransaction?
  • DialogFragment llama de nuevo a la actividad, pero desea actividad para actualizar otro fragmento
  • ¿Cómo puedo establecer la visibilidad de un elemento de ActionBar en fragmento diferente
  • Android | Detener TabLayout recargar / actualizar mis fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.