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.