Android:Activity和Fragments之间的OptionMenu

时间:2013-03-15 02:57:03

标签: android menu android-fragments optionmenu

在我的应用中,我有一个托管两个片段的活动。如果我将一个MenuItem添加到菜单中,我可以在我的片段中检索它吗? Activity中的OptionMenu和他的子片段中的OptionMenu之间的联系是什么?

3 个答案:

答案 0 :(得分:5)

您必须使用setHasOptionsMenu();作为传递给它的参数调用true,然后您可以覆盖onCreate选项菜单。

@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);


}

答案 1 :(得分:0)

您无法在子片段中捕获活动菜单的事件。相反,您可以让您的片段实现类似MenuItem.OnMenuItemClickListener的内容。在您的活动的onOptionsItemSelected(MenuItem item)方法中,您只需致电YourFragmentonMenuItemClick()

答案 2 :(得分:0)

我发现我可以在活动MenuItem中添加onCreateOptionsMenu(),然后通过他们的ID在Fragment s中检索它们,如下所示:

的活动:

@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);                         
}