5

Ho un FragmentTabHost nel layout di uno dei miei frammenti (chiamiamolo parentFragment). Ora, inizializzo tutti i frammenti che si trovano nel tabhost a livello di codice in onCreateView di parentFragment. Quando viene creato il parentFragment tutto sembra funzionare correttamente e mostra il frammento della prima scheda correttamente.Frammenti non visibili dopo il cambio scheda in nidificato FragmentTabHost

Ma non appena si passa da una scheda all'altra, i frammenti scompaiono (posso vedere il colore di sfondo del tabhost, ma non il contenuto del contenitore di contenuto della tabella). Anche il primo frammento è scomparso quando ritornai ad esso. I frammenti vengono effettivamente creati come mostra il mio log, ma non sono visibili.

Suppongo che abbia a che fare con (ri) creare i frammenti, poiché ho anche provato a utilizzare un ViewPager con un FragmentPagerAdapter. Lì potrei passare felicemente tra i primi due frammenti (precaricato a causa di setOffscreenPageLimit() == 1), ma anche i frammenti (ri) creati oltre questo erano vuoti.

Qualche idea a qualcuno ??

Ecco alcuni del mio codice:

estratto di XML di parentFragment:

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

estratto di XML di parentFragment:

... 
@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; 
    } 
... 

layout semplice inflazione in sub scheda di frammento:

... 
@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

Quindi i frammenti si nascondono quando il focus cambia? – jsmith

+0

Si scopre che un ViewGroup personalizzato circostante stava causando questo problema a causa del modo in cui è stato gestito suLayout e suMisura. – Till

+1

@Till Sei riuscito a risolvere questo? Ottenere lo stesso problema ora. http://stackoverflow.com/questions/17009462/fragmenttabhost-on-tab-change-the-fragments-get-destroyed-and-disappear –

risposta

1

non ho affrontato FragmentTabHost prima, ma vorrei suggerire di utilizzare il metodo setNavigationMode Azione Bar (ActionBar.NAVIGATION_MODE_TABS) per ottenere la navigazione scheda nella vostra applicazione (doc qui: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs) Questo metodo proposto sembra meno lavoro e usa meno titolari di frammenti. In pratica istanziate le vostre schede, aggiungetele al backstack e mostratele/nascondetele in base alla scheda selezionata tramite i metodi onTabSelected o onTabUnselected.

Spero che aiuti.

+0

Sarei d'accordo. Ma sfortunatamente devo usare un TabHost a causa del design/layout richiesto ... – Till

Problemi correlati