处理片段菜单选项

时间:2012-04-10 03:00:39

标签: android menu android-fragments

我有两个片段,一个是ListView,一个是"详细信息"视图。每个片段都有自己的菜单选项。在横向模式下,显示两个片段时,每个菜单合并为一个(我假设是设计),但是如果我将设备旋转为纵向,则菜单保持合并,并显示不应该和的选项。 #39;在那里。不确定我是否需要在我的问题中包含任何代码。

编辑:

找到此question,但添加menu.clear()仅显示详情视图的菜单选项,在横向和更改回纵向时,菜单不会更改。

我想更大的问题是如何处理片段,每个片段都有自己的一组菜单选项。

更新

要清楚,如果设备处于纵向或横向模式,菜单可以正常工作。从横向旋转到纵向或反之亦然会出现问题。即使调用了onCreateOptionsMenu,菜单似乎也没有重置。

3 个答案:

答案 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

如果这对您有帮助,请将此帖标记为答案。

感谢。

相关问题