【发布时间】:2014-06-04 09:53:09
【问题描述】:
我有一个夏洛克片段活动,其中有 3 个片段。
Fragment A、Fragment B、Fragment C 是三个片段。我只想在片段 B 中显示完成选项菜单。
和活动以片段A启动。选择片段B完成后,添加按钮。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if(!menusInflated){
inflater.inflate(R.menu.security, menu);
menusInflated=true;
}
super.onCreateOptionsMenu(menu, inflater);
}
当我再次启动 Fragment A 时,我想为此选择 Menu DONE(在 Fragment B 中设置),我正在这样做
setHasOptionsMenu(false);
MenuItem item = (MenuItem) menu.findItem(R.id.done_item);
item.setVisible(false);
但这根本没有隐藏,如果第一次从 Fragment A 启动,它也会在 Activity 时给出 NullPointerException。
请告诉我是什么问题。
【问题讨论】:
-
你的问题解决了吗? , 我也有同样的问题。谢谢
-
此问题与您遇到的问题不一致。您不需要从操作栏中“隐藏”按钮,您需要确保操作栏选项为不同的片段正确加载。在每个 onCreateOptionsMenu() 函数中膨胀菜单之前使用 menu.clear() ,这将删除其中所有过时的选项。
-
只是为了澄清一下,在您的情况下,您需要在片段 A 中使用空/默认菜单覆盖 onCreateOptionsMenu()(并使用 menu.clear())。您可能还需要为 Fragment C 执行此操作。手动确保 ActionBar 菜单在 Fragment 中的行为正确是使用 Fragments 来显示内容而不是使用活动的成本。
-
如果以下任何答案对您有所帮助,请接受答案作为解决方案。
标签: android actionbarsherlock android-fragmentactivity