2012-01-31 17 views
5

Sono riuscito a creare un menu della scheda ActionBar, chiamando diverse classi che estendono i frammenti. Il problema è che quando cambio l'orientamento, passare da una voce di menu all'altra non fa nulla. Ma alla fine ho capito il problema.ICS Android + schede ActionBar + modifica dell'orientamento

Il problema principale qui è vecchio frammento non lo fanno essere rimossi quando cambia l'orientamento, quindi c'è sempre una copia di una scheda inutilizzata appena sopra scheda selezionata dell'utente

Tutte le idee? Mi manca qualcosa di base?

Grazie

risposta

15

ho finalmente trovato la soluzione da me, nel metodo onTabSelected definito nella mia classe personalizzata ActionBar.TabListener ho avuto ft.add che ha aggiunto il frammento alla mia vista.

Quando l'orientamento viene modificato, il metodo onTabUnselected non è stato chiamato, quindi il frammento è rimasto lì.

Sostituzione di ft.add a ft.replace riuscito a cancellare tutti i vecchi frammenti in modo che i nuovi siano correttamente visualizzati.

Spero che questo aiuti qualcun altro

1

penso che sia meglio risparmiare selectedIndex sull'attività ricreazione. In questo modo non si ha il problema perché lo stesso indice è selezionato e non selezionato non è necessario ed è anche più bello per l'utente.

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

far controllare il costruttore della scheda di chi ascolta per il vecchio frammento (a sinistra dalla onTabUnselected() non viene chiamato) e staccarlo. È disponibile un listener di schede creato appositamente per ActionBarSherlock: FragmentTabListener.java. Lo stesso codice costruttore (per l'utilizzo senza le librerie di supporto) si trova anche in FragmentTabs.java dalle demo dell'API.