3

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

编辑:

找到这个问题,但添加 menu.clear() 仅显示详细信息视图的菜单选项,当处于横向并改回纵向时,菜单不会改变。

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

更新:

需要明确的是,如果设备处于纵向或横向模式,菜单可以正常工作。从横向旋转到纵向时会出现此问题,反之亦然。onCreateOptionsMenu即使被调用,菜单似乎也不会重置。

4

3 回答 3

2

我是新来的,所以很抱歉,如果我没有将所有内容都格式化为一流的。我也有关于菜单贡献和Fragments 的类似问题。这是我在我的例子中所做的......

我有一个FragmentActivity托管一个ListFragment和一个附加Fragment的包含所选列表项的详细信息 - 非常典型的平板电脑配置。在选择列表项之前不会添加此附加详细信息Fragment...当我选择列表项时,我想阻止ListFragments 菜单项对托管FragmentActivity操作栏做出贡献。(从 UI 的角度来看,用户主要关注的是新添加的 Fragment,要返回到之前的状态,他们会取消选择他们选择的项目。)由于不ListFragment应该知道其他 Fragment 以确保可重用性,我发现利用该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);
}

这种方法意味着您的 Fragment 仍然可以重用(它们仍然按照最初的设计进行贡献),但是您的主机FragmentActivity可以操作 Activity UI,这是它的授权角色之一。

我希望这会有所帮助。

于 2012-04-21T14:46:50.167 回答
1

想通了这个问题,如果你正在使用setRetainInstance(true)那么菜单不会刷新。不幸的是,在改变方向时,删除这个中断其他东西,比如我的 AsyncTask 会被杀死。

于 2012-04-15T22:37:56.600 回答
0

由于您希望每次方向更改时都将膨胀的菜单刷新到操作栏尝试声明您在清单中的活动持有片段以侦听配置更改

然后重写 onConfigurationChanged 方法,并使用 invalidateOptionMenu API 看到这个链接:

活动无效选项菜单:

http://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu%28%29

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

谢谢。

于 2012-04-19T02:16:31.847 回答