带有片段的 ActionBar 选项卡旋转

Posted

技术标签:

【中文标题】带有片段的 ActionBar 选项卡旋转【英文标题】:ActionBar Tabs with fragments on rotate 【发布时间】:2012-02-29 10:11:35 【问题描述】:

我正在构建一个带有ActionBar 和下面两个标签的应用程序。 如果设备/模拟器没有旋转,一切正常。如果旋转,选项卡状态会自动切换到 tab1(正常,因为 onCreate 被调用)但内容不会改变。如果我在新方向中选择一个选项卡,则会调用所选 Fragment 中的 onCreateView() 方法,但视图不会更新(始终保持不变)。有什么建议吗?

代码。

主要活动:

    ActionBar actionbar = getActionBar();
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab ATab = actionbar.newTab().setText(R.string.player);
    ActionBar.Tab BTab = actionbar.newTab().setText(R.string.stations);

    Fragment AFragment = new AFragment();
    Fragment BFragment = new BFragment();

    PlayerTab.setTabListener(new MyTabsListener(AFragment));
    StationsTab.setTabListener(new MyTabsListener(BFragment));

    actionbar.addTab(ATab);
    actionbar.addTab(BTab);

具有显示简单文本视图的相同选项卡。 textview 简单地说选择了哪个选项卡。

片段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.a, container, false);

上面提到的 Fragment 布局只包含一个带有硬编码文本的 TextView。 (仅用于测试目的)


主布局如下所示。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_ >


    <LinearLayout
        android:id="@+id/fragment_container"
        android:layout_
        android:layout_ >
 </LinearLayout>

</LinearLayout>

【问题讨论】:

您希望在设备旋转时调用 onCreate() 吗? 是和否,在这个例子中是可以的。在最终的应用程序中,也可以,但我认为不是最好的方法。你想使用android:configChanges="keyboardHidden|orientation" 吗?我读到了它,有人说关于内存泄漏和最后的手段。那正确吗?有没有更好的办法? 【参考方案1】:

解决了。我每次都重新创建了片段,不再这样做了。

在我的 TabListener 和 onTabSelected(Tab tab, FragmentTransaction ft)ft.add() 中更改为 ft.replace()

【讨论】:

这个bug也在官方Android文档中:developer.android.com/guide/topics/ui/actionbar.html#Tabs也许有人也可以在那里修复它。

以上是关于带有片段的 ActionBar 选项卡旋转的主要内容,如果未能解决你的问题,请参考以下文章

ActionBar 中的选项卡数

IllegalArgumentException:快速切换 ActionBar 选项卡时没有找到片段 id 的视图

删除选项卡时在 ActionBar 选项卡片段中运行代码

ActionBar Sherlock ,操作栏选项卡和片段

带有片段的 Android Up 按钮未显示完整片段

使用 ActionBar 旋转 Android 的双片段