片段处理屏幕方向与操作栏中的选项卡

Posted

技术标签:

【中文标题】片段处理屏幕方向与操作栏中的选项卡【英文标题】:fragment handling screen orientation with tabs in actionbar 【发布时间】:2012-04-06 20:16:08 【问题描述】:

有人可以向我解释一下,或者指出一个链接或一个示例,说明在涉及片段时应该如何处理屏幕方向。我目前遇到的问题是我有一个带有三个选项卡的操作栏的应用程序。每个选项卡包含一个片段。因此,当我翻转设备时,只有我设置为使用选择的一个片段

actionbar.setSelectedNavigationItem(1) 

显示(为了不混淆,其他选项卡是可见的,但是当我单击它们时没有任何反应,它们无法被选择和显示。它们的内容永远不会显示)。在这些情况下有什么要做的吗?有人可以给我一个建议,我将不胜感激。谢谢你。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,在这里找到了解决方案: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html

问题是先前保存状态的选项卡已经存在片段。您必须停用它们。

这是 TabListener 的构造函数的 code-sn-p:

public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) 
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mArgs = args;

        // Check to see if we already have a fragment for this tab, probably
        // from a previously saved state.  If so, deactivate it, because our
        // initial state is that a tab isn't shown.
        mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null && !mFragment.isDetached()) 
            FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
            ft.detach(mFragment);
            ft.commit();
        
    

希望我能帮到你。

【讨论】:

几天前我也想通了。但解决它的方式有所不同。在片段的 onDestroyView 方法中,我为该特定片段调用 remove,因此它不会是来自先前状态的任何片段。但我想你的方式也解决了问题。所以谢谢你! 解释得好,有道理,解决了一个特定的常见问题。非常感谢。 A+ 谢谢!顺便说一句,我在某些地方使用隐藏/显示而不是分离/附加,以避免片段视图重新创建(有时它很长)。然后它也确实有效。

以上是关于片段处理屏幕方向与操作栏中的选项卡的主要内容,如果未能解决你的问题,请参考以下文章

带有导航选项卡的 ActionBar 随屏幕方向改变高度

ActionItem 在屏幕旋转时丢失

手动设置片段的屏幕方向

Android TabActivity 和动态 Tabs 屏幕方向问题

如何在屏幕方向更改时附加片段?

屏幕方向期间片段内的异步任务