2012-02-07 11 views
9

Ho creato un'app con un ActionBar e due schede di seguito. Tutto funziona correttamente se il dispositivo/emulatore non è ruotato. Se ruotato, lo stato della scheda passa automaticamente a tab1 (normale, perché viene chiamato onCreate) ma il contenuto non viene modificato. Se seleziono una scheda nel nuovo orientamento, viene chiamato il metododal numero selezionato Fragment ma la vista non viene aggiornata (resta sempre la stessa). Qualche consiglio?ActionBar Tab con frammenti su rotazione

Il codice.

attività principale:

ActionBar actionbar = getActionBar(); 
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab ATab = actionbar.newTab().setText(R.string.player); 
    ActionBar.Tab BTab = actionbar.newTab().setText(R.string.stations); 

    Fragment AFragment = new AFragment(); 
    Fragment BFragment = new BFragment(); 

    PlayerTab.setTabListener(new MyTabsListener(AFragment)); 
    StationsTab.setTabListener(new MyTabsListener(BFragment)); 

    actionbar.addTab(ATab); 
    actionbar.addTab(BTab); 

Con schede identiche che visualizzano un semplice TextView. La semplice vista del testo dice quale scheda è selezionata.

Frammenti:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.a, container, false); 
} 

La disposizione frammento, di cui sopra, contiene solo TextView con testo hardcoded. (Solo a scopo di test)


Il layout Principale è simile a questo.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 


    <LinearLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
</LinearLayout> 

</LinearLayout> 
+0

Vuoi onCreate() da chiamare quando viene ruotato il dispositivo? – nhaarman

+0

Sì e No, in questo esempio va bene. Nell'app finale, anche Ok, ma penso che non sia il modo migliore. Vuoi usare 'android: configChanges =" keyboardHidden | orientation "'? Ho letto su di esso e qualcuno ha detto qualcosa su perdite di memoria e l'ultima spiaggia. È giusto? C'è un modo migliore? – Leandros

risposta

19

Risolto. Ho ricreato il frammento ogni volta, non lo risolve più.

cambiato nella mia TabListener e onTabSelected(Tab tab, FragmentTransaction ft), ft.add()-ft.replace()

+2

Questo bug si trova anche nei documenti ufficiali di Android: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs Forse qualcuno può sistemarlo anche lì. – StefanMK

Problemi correlati