2012-01-31 17 views
5

Logré hacer un menú de pestañas ActionBar, llamando a diferentes clases que extienden Fragmentos. El problema es que cuando cambio la orientación, cambiar entre los elementos del menú no hace nada. Pero finalmente descubrí el problema.Android ICS + ActionBar Tabs + Cambio de orientación

El principal problema aquí es viejo fragmento no lo hacen de extraerlas cuando los cambios de orientación, por lo que no es siempre una copia de una pestaña sin usar justo por encima de la pestaña seleccionada del usuario

¿Alguna idea? Me falta algo básico?

Gracias

Respuesta

15

finalmente encontré la solución a solas, en el método onTabSelected definido en mi clase personalizada ActionBar.TabListener tuve ft.add que añadió el fragmento de mi punto de vista.

Cuando se cambia la orientación, no se llamó al método onTabUnselected, por lo que el Fragmento permaneció allí.

Reemplazando ft.add por ft.replace logró borrar todos los fragmentos antiguos para que los nuevos se muestren correctamente.

Espero que esto ayude a alguien más

1

creo que es mejor ahorrar selectedIndex sobre la actividad recreativa. De esta forma no tiene el problema porque se selecciona el mismo índice y no se selecciona y no es necesario para el usuario.

protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     int i = getActionBar().getSelectedNavigationIndex(); 
     outState.putInt("selectedTabIndex", i);  
} 

    //And then restore 
    private void initActionBar(Bundle savedInstanceState) { 
     ActionBar ab = getActionBar(); 
     ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     ab.addTab(...); 
      ... 

     if(savedInstanceState != null) { 
      int index = savedInstanceState.getInt("selectedTabIndex"); 
      getActionBar().setSelectedNavigationItem(index); 
     } 
-1

Tener cheque constructor del oyente pestaña para el viejo fragmento (a la izquierda de onTabUnselected() no se llama) y separarla. Hay un escucha de pestañas específicamente para ActionBarSherlock aquí: FragmentTabListener.java. El mismo código de constructor (para usar sin las bibliotecas de soporte) también está en FragmentTabs.java de las demostraciones de API.

Cuestiones relacionadas