Android TabHost - setCurrentTab()不会更改选项卡内容

时间:2016-09-29 14:52:57

标签: android android-layout android-fragments android-tabhost android-tabs

我遇到的问题是当我使用tabHost.setCurrentTab(...)时标签内容不会改变。可以看出,相应的选项卡被标记为活动,内容保持不变。当我单击选项卡时,内容会发生变化。

到安装程序。

我在一个应用程序中使用片段具有不同的功能。一个片段包含tabhost。每个选项卡都有自己的布局,片段应在这些选项卡之间切换,并根据应用程序的状态显示选项卡。

我会尝试引用重要的代码段落。

片段的主要xml文件:

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

包含的xml文件只包含相对布局和一堆按钮和textview。

碎片onCreate方法:

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

我在这段摘录中只包含了两个标签,但这是基本程序。

我试图使标签主机无效,以便重新绘制所有内容。这并没有改变任何事情。

1 个答案:

答案 0 :(得分:0)

对于任何登陆此问题解决方案的人:

使用:

 tabHost.setCurrentTab(tabNumber);

而不是:

 tabHost.getTabWidget().setCurrentTab(tabNumber);