在我当前的项目中,我有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
编写一些自定义代码来计算当前所选标签的位置并自行滚动,但这是最后的手段