Android:活动和片段之间的OptionMenu

7
在我的应用程序中,我有一个活动承载了两个片段。如果我在菜单中添加一个菜单项,我能在我的片段中取回它吗?活动中的OptionMenu和子片段中的OptionMenu之间有什么联系?

想要在片段中检索menuItem的原因是什么?通常,您只想从片段中添加到菜单,这只涉及在片段中覆盖onCreateOptionsMenu并在其onCreate方法中调用setHasOptionsMenu(true)。 - Marco RS
3个回答

5

您需要调用setHasOptionsMenu();并将true作为参数传递给它,然后才能重写创建选项菜单。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Enable the option menu for the Fragment
    setHasOptionsMenu(true);
}

如果您想为每个片段设置不同的OptionsMenu,您需要定义两个不同的菜单XML文件,并在onCreateOptionsMenu中进行充气。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    inflater.inflate(R.menu.fragment1_menu, menu);


}

2
它显示了两个菜单...一个来自我的活动,另一个在片段中。你知道如何隐藏我在所有片段中都有的活动菜单吗? - djk
2
我认为你不应该在Activity中膨胀菜单以避免这种情况。 - Shajeel Afzal
尝试在片段中设置menu.removeItem(R.id.parentMenuItem);以避免重复。 - Faisal Naseer

0
我发现我可以在Activity的onCreateOptionsMenu()中添加MenuItem,然后通过它们的id在Fragment中检索它们,就像这样:
Activity:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     itemId= 0;
     menu.add(0, itemId, 0, "item");
     return super.onCreateOptionsMenu(menu);
}

片段:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    itemId= 0
    MenuItem menuItem= menu.findItem(itemId);                         
}

0

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