2012-04-10 73 views
3

我有两个片段,一个ListView和一个“细节”视图。每个片段都有自己的菜单选项。当处于横向模式下,显示两个片段时,每个菜单都合并为一个(我假设是按设计),但是如果将设备旋转到纵向,则菜单保持合并状态,并显示不应该显示的选项在那里。不知道是否需要在我的问题中包含任何代码。处理片段菜单选项

编辑:

发现这个question,但加入menu.clear()只给出了详细的菜单选项查看,在景观和变回肖像时,菜单不会改变。

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

更新:

需要明确的是,如果该设备在肖像或风景模式,左侧菜单做工精细。从横向旋转到纵向时发生问题,反之亦然。即使调用onCreateOptionsMenu,菜单似乎也不会重置。

回答

1

如果您使用的是setRetainInstance(true),则认为该问题不会刷新。不幸的是,在改变方向时,除去这个中断,其他事情(比如我的AsyncTask)就会被终止。

2

我是新来的,所以我很抱歉,如果我没有格式化所有的顶尖。我也有类似的问题关于菜单贡献和Fragment s。这是我在我的实例...

我有一个FragmentActivity托管ListFragment和一个额外的Fragment包含所选清单项的细节 - 非常典型的平板电脑配置。此附加详细信息Fragment不会添加,直到选择列表项目...当我选择一个列表项目时,我想阻止ListFragment的菜单项目对主机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); 
} 

这种方法意味着你的碎片残留可重复使用(他们仍然贡献为最初设计),但您的主机FragmentActivity可以操纵活动UI是获得了授权的角色是一个。

我希望有帮助。