处理片段菜单选项

3
我有两个片段,一个是ListView,另一个是“详细”视图。每个片段都有自己的菜单选项。在横向模式下,显示两个片段时,每个菜单都会合并成一个(我认为这是设计上的),但如果我将设备旋转到纵向,则菜单仍然合并,并显示不应出现的选项。不确定是否需要在我的问题中包含任何代码。
编辑:
找到了这个question,但添加menu.clear()只会在详细视图中显示菜单选项,在横向和改回纵向时,菜单不会更改。
我想更大的问题是如何处理各自具有菜单选项集的片段。
更新:
明确一下,如果设备保持纵向或横向模式,则菜单可以正常工作。当从横向模式旋转到纵向模式或反之亦然时,问题就会发生。即使调用onCreateOptionsMenu,菜单也似乎无法重置。
3个回答

2

我是新手,请见谅如果没有做到顶尖的格式。我也有类似的问题,关于菜单贡献和Fragment。以下是我在实例中所做的...

我有一个托管ListFragment和显示列表项详细信息的其他FragmentFragmentActivity - 这是相当典型的平板电脑配置。这个额外的详细Fragment直到选择列表项后才会添加... 当我选择一个列表项时,我希望阻止ListFragment的菜单项对托管FragmentActivity的操作栏产生影响。(从用户界面的角度来看,用户的主要焦点是新添加的Fragment,要返回到之前的状态,他们需要取消选择他们选择的选项。)由于ListFragment不应该知道其他的 Fragment,为了确保可重用性,我发现在FragmentActivity级别利用 onPrepareOptionsMenu(..) 方法是我正确的前进方式。

将以下代码片段添加到托管的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);
}

这种方法意味着您的片段仍然可重复使用(它们仍然按照最初设计的方式做出贡献),但您的宿主FragmentActivity可以操作活动UI,这是其授权角色之一。
希望这能有所帮助。

1

解决了这个问题,如果你使用了setRetainInstance(true),那么菜单将不会刷新。不幸的是,删除它会破坏其他东西,比如当改变方向时我的AsyncTask会被杀死。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接