5

Ich habe eine FragmentTabHost im Layout eines meiner Fragmente (nennen wir es Elternfragment). Jetzt initialisiere ich jedes der Fragmente, die im Tabhost programmatisch in onCreateView von parentFragment gehen. Wenn das parentFragment erstellt wird, scheint alles zu funktionieren und es zeigt das Fragment der ersten Registerkarte korrekt an.Fragmente nicht sichtbar nach Tab-Schalter in verschachtelten FragmentTabHost

Aber sobald ich den Tab einmal wechsle, verschwinden die Fragmente (ich kann die Hintergrundfarbe des Tabhost sehen, aber keinen Inhalt des Tabcontent-Containers). Auch das erste Fragment ist weg, wenn ich wieder darauf zurückwechsle. Die Fragmente werden tatsächlich als meine Logging-Shows erstellt, aber sie sind nicht sichtbar.

Ich gehe davon aus, dass es mit dem (erneuten) Erstellen der Fragmente zu tun hat, da ich auch einen ViewPager mit einem FragmentPagerAdapter probiert habe. Dort könnte ich glücklich zwischen den ersten beiden Fragmenten wechseln (vorgeladen wegen setOffscreenseiteLimit() == 1), aber Fragmente (neu), die darüber hinaus erzeugt wurden, waren auch leer.

Irgendwelche Gedanken jemand ??

Hier einige meiner Code:

Ausschnitt des parentFragment XML:

... 
      <android.support.v4.app.FragmentTabHost 
       android:id="@android:id/tabhost" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" > 

       <RelativeLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" > 

        <TabWidget 
         android:id="@android:id/tabs" 
         android:layout_width="match_parent" 
         android:layout_height="40dp" 
         android:layout_alignParentTop="true" /> 

        <FrameLayout 
         android:id="@android:id/tabcontent" 
         android:layout_width="0dp" 
         android:layout_height="0dp" /> 

        <FrameLayout 
         android:id="@+id/realtabcontent" 
         android:layout_below="@android:id/tabs" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" /> 
       </RelativeLayout> 
      </android.support.v4.app.FragmentTabHost> 
... 

Ausschnitt des parentFragment XML:

... 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Log.d(TAG, "onCreateView"); 
     ViewGroup layoutContainer = (ViewGroup) inflater.inflate(R.layout.fragment_app_details_test, container, false); 

      tabHost = (FragmentTabHost) layoutContainer.findViewById(android.R.id.tabhost); 
     tabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent); 
     tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("TAB1"), 
       FragmentSubTab1.class, null); 
     tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("TAB2"), 
       FragmentSubTab2.class, null); 
     tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("TAB3"), 
       FragmentSubTab3.class, null); 

     return layoutContainer; 
    } 
... 

Einfache Inflation Layout in Unter Registerkarte Fragment:

... 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ViewGroup layoutContainer = (ViewGroup) inflater.inflate(R.layout.subfragment1, container, 
       false); 

     initUi(layoutContainer); 
     return layoutContainer; 
    } 
... 
+0

So werden die Fragmente versteckt, wenn sich der Fokus ändert? – jsmith

+0

Es stellt sich heraus, dass eine umgebende benutzerdefinierte ViewGroup dieses Problem verursacht hat, aufgrund der Art, wie onLayout und onMeasure behandelt wurden. – Till

+1

@Till Haben Sie das geschafft? Das gleiche Problem jetzt bekommen. http://stackoverflow.com/questions/17009462/fragmenttabhost-on-tab-change-the-fragments-get-destroyed-and-disappear –

Antwort

1

Ich habe nicht mit FragmentTabHost behandelt, bevor aber ich möchte Sie die Aktionsleiste Methode setNavigationMode (ActionBar.NAVIGATION_MODE_TABS) verwenden, um vorschlagen Tabulatornavigation in Ihrer Anwendung (Dok hier: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs) zu erreichen Dieses vorgeschlagene Verfahren scheint weniger Arbeit und verwendet weniger Fragmenthalter. Sie inspizieren im Wesentlichen Ihre Registerkarten, fügen sie zum Backstack hinzu und zeigen/verbergen sie entsprechend der ausgewählten Registerkarte mit den Methoden onTabSelected oder onTabUnselected.

Ich hoffe, es hilft.

+0

würde ich zustimmen. Leider muss ich einen TabHost aufgrund des gewünschten Designs verwenden. – Till

Verwandte Themen