在setCurrentTab()之后看不到FragmentTabHost选项卡

时间:2015-10-13 11:29:04

标签: android horizontalscrollview fragment-tab-host

在我当前的项目中,我有FragmentTabHost管理六个标签。在父片段的onSaveInstanceState()内,我保存所选选项卡的当前索引,然后在onCreateView()中恢复它。除了能见度之外,所有这些都很好。当我恢复实例状态并调用setCurrentTab()时,会重新选择正确的选项卡,但该选项卡不可见,因为FragmentTabHost似乎想要创建第一个选项卡可见,就好像它是被选中的那个。

有没有办法定位标签,以便在屏幕上始终显示以编程方式选择的标签?此外,FragmentTabHost包含在HorizontalScrollView

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:scrollbars="none">

         <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </HorizontalScrollView>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@android:color/white"/>

</LinearLayout>

UPDATE#1 :经过多次挖掘后,我认为以下内容可能会提供一些答案。虽然文档指出绝大多数标签功能应该通过FragmentTabHost而不是TabWidget,但我在获得对TabWidget的引用后尝试了以下内容:

if (savedInstanceState != null) {
    Log.i(TAG, "onCreateView() : Getting player data from saved instance");

    // Restore value of members from saved state
    player = savedInstanceState.getParcelable(ARG_PLAYER);
    populate();

    // Reselect the tab that was active when the fragment got swapped out
    int currentTab = savedInstanceState.getInt(ARG_CURRENT_TAB);
    fragmentTabHost.setCurrentTab(currentTab);
    tabWidget.focusCurrentTab(currentTab);   <---- added this
} else {
    ...
}

我开始认为我必须为HorizontalScrollView编写一些自定义代码来计算当前所选标签的位置并自行滚动,但这是最后的手段

0 个答案:

没有答案