1

Ich habe das Problem, dass der Inhalt der Registerkarte nicht ändert, wenn ich tabHost.setCurrentTab (...) verwenden. Man sieht, dass die entsprechende Registerkarte als aktiv markiert ist, der Inhalt bleibt gleich. Wenn ich auf den Tab klicke, ändert sich der Inhalt.Android TabHost - setCurrentTab() ändert nicht den Inhalt der Registerkarte

Zum Setup.

Ich habe verschiedene Funktionen in einer App mit Fragmenten. Ein Fragment enthält einen Tabhost. Jede Registerkarte hat ihr eigenes Layout und das Fragment sollte zwischen diesen Registerkarten wechseln und je nach Zustand der App eine Auswahl von Registerkarten anzeigen.

Ich werde versuchen, die wichtigen Code-Passagen zu zitieren.

Die Haupt XML-Datei des Fragments:

<TabHost 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/tabHost" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="fill" 
     android:background="@color/colorPrimary"/> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      > 

      <include layout="@layout/fragment_master_emg_start" 
       android:layout_height="445dp" 
       android:layout_width="fill_parent" 
       android:layout_gravity="center|bottom"/> 

      <include layout="@layout/fragment_master_emg_setup" 
       android:layout_height="445dp" 
       android:layout_width="fill_parent" 
       android:layout_gravity="center|bottom"/> 

    ... some more includes 

    </FrameLayout> 
</TabHost> 

Die XML-Dateien enthält ein relatives Layout und eine Reihe von Schaltflächen und Textviews nur enthalten.

Die Fragmente onCreate Methode:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Get View 
    View rootView = inflater.inflate(R.layout.fragment_master_emg, container, false); 
    Button button= (Button)rootView.findViewById(R.id.button); 
    button.setText("test"); 
    TabHost tabHost=(TabHost)rootView.findViewById(R.id.tabHost); 
    tabHost.setup(); 
    // Tabs 
    // Setup - Start Tab 

    TabHost.TabSpec t=tabHost.newTabSpec("Tab0"); 
    t.setContent(R.id.master_emg_start); 
    t.setIndicator("EMG Measurement - Setup"); 
    tabHost.addTab(t); 

    TabHost.TabSpec t0=tabHost.newTabSpec("Tab1"); 
    t0.setContent(R.id.master_emg_setup); 
    t0.setIndicator("Setup"); 
    tabHost.addTab(t0); 

    .... more tabs 
    .... 

    // Set initial visibility 
    tabHost.getTabWidget().getChildAt(0).setVisibility(View.VISIBLE);   
    tabHost.getTabWidget().getChildAt(1).setVisibility(View.GONE); 

    // Buttons to switch tabs 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      TabHost tabHost=(TabHost)getActivity().findViewById(R.id.tabHost); 
      tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE); 
      tabHost.getTabWidget().getChildAt(1).setVisibility(View.VISIBLE); 
      tabHost.getTabWidget().setCurrentTab(1); 
     } 
    }); 

Ich habe enthalten nur zwei Registerkarten in diesem Auszug, aber dies würde die grundlegende Vorgehensweise sein.

Ich habe versucht, den Tab-Host ungültig zu machen, um alles neu gezeichnet zu haben. Das hat nichts geändert.

Antwort

0

Für alle hier für dieses Problem Lösung Landung:

Verwendung:

tabHost.setCurrentTab(tabNumber); 

Statt:

tabHost.getTabWidget().setCurrentTab(tabNumber); 
Verwandte Themen