我有两个片段,一个是ListView,一个是"详细信息"视图。每个片段都有自己的菜单选项。在横向模式下,显示两个片段时,每个菜单合并为一个(我假设是设计),但是如果我将设备旋转为纵向,则菜单保持合并,并显示不应该和的选项。 #39;在那里。不确定我是否需要在我的问题中包含任何代码。
编辑:
找到此question,但添加menu.clear()仅显示详情视图的菜单选项,在横向和更改回纵向时,菜单不会更改。
我想更大的问题是如何处理片段,每个片段都有自己的一组菜单选项。
更新
要清楚,如果设备处于纵向或横向模式,菜单可以正常工作。从横向旋转到纵向或反之亦然会出现问题。即使调用了onCreateOptionsMenu
,菜单似乎也没有重置。
答案 0 :(得分:2)
我是新来的,如果我不把一切都打成一流,那么道歉。我也有关于菜单贡献和Fragment
的类似问题。这是我在我的实例中所做的......
我有FragmentActivity
托管ListFragment
和其他Fragment
,其中包含所选列表项的详细信息 - 非常典型的平板电脑配置。在选择列表项之前,不会添加此附加详细信息...当我选择列表项时,我想阻止Fragment
的菜单项为托管ListFragment
操作做出贡献酒吧。 (从UI的角度来看,用户主要关注的是新添加的片段,要返回到之前的状态,他们取消选择他们选择的项目。)由于FragmentActivity
不应该知道其他片段以确保重新使用,我发现在ListFragment
级别使用onPrepareOptionsMenu(..)
方法对我来说是正确的方法。
将此代码段添加到托管FragmentActivity
,以快速获得您想要的行为;
FragmentActivity
此方法意味着您的片段仍然可以重复使用(它们仍然按照最初的设计进行贡献),但您的主机@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// 'Find' the menu items that should not be displayed - each Fragment's menu has been contributed at this point.
menu.findItem(id.sync).setVisible(false);
}
return super.onPrepareOptionsMenu(menu);
}
可以操作作为其授权角色之一的活动UI。
我希望有所帮助。
答案 1 :(得分:1)
想出这个问题,如果你使用的是setRetainInstance(true)
,那么菜单就不会刷新。不幸的是,在更改方向时,删除其他内容,例如我的AsyncTask会被杀死。
答案 2 :(得分:0)
由于您希望每次更改方向时都要将夸大的菜单刷新到操作栏,然后尝试声明清单中的活动包含要侦听配置的片段
然后覆盖onConfigurationChanged方法,并使用invalidateOptionMenu API 看到这个链接:
活动无效选项菜单:
http://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu%28%29
如果这对您有帮助,请将此帖标记为答案。
感谢。