2012-02-07 7 views
9

Tworzę aplikację z ActionBar i dwiema zakładkami poniżej. Wszystko działa poprawnie, jeśli urządzenie/emulator nie jest obrócone. Jeśli zostanie obrócony, stan karty przełącza się automatycznie na tab1 (normalny, ponieważ onCreate zostanie wywołany), ale zawartość nie zostanie zmieniona. Jeśli wybiorę kartę w nowej orientacji, wywoływana jest metoda onCreateView() z wybranego Fragment, ale widok nie jest aktualizowany (pozostaje zawsze taki sam). Jakieś wskazówki?ActionBar Tabulatory z obróconymi fragmentami

Kod.

Główna działalność:

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); 

Z identycznych kart, które wyświetlają prosty TextView. W widoku tekstowym można powiedzieć, która karta jest wybrana.

Fragmenty:

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

Fragment układ, wspomniano powyżej, tylko zawiera TextView z zakodowanego na stałe Tekst. (Tylko w celach testowych)


Wygląd główny wygląda tak.

<?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

Chcesz onCreate(), aby zostać wywołana, gdy urządzenie jest obrócony? – nhaarman

+0

Tak i nie, w tym przykładzie wszystko jest w porządku. W ostatecznej aplikacji, również Ok, ale myślę, że nie jest to najlepszy sposób. Czy chcesz użyć 'android: configChanges =" keyboardHidden | orientation "'? Czytałem o tym i każdy mówił coś o wyciekach pamięci i ostateczności. Czy to prawda? Czy istnieje lepszy sposób? – Leandros

Odpowiedz

19

Rozwiązany. Odtworzyłem ten fragment za każdym razem, nie robię tego już rozwiązałem.

zmieniło w moim TabListener i onTabSelected(Tab tab, FragmentTransaction ft), ft.add() do ft.replace()

+2

Ten błąd jest również dostępny w oficjalnych dokumentach systemu Android: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs Może ktoś też to naprawi. – StefanMK