在Android片段中扩展菜单

时间:2016-01-06 07:43:37

标签: android android-fragments android-menu

我有一个Android应用程序,只有一个活动和许多片段。我想要做的是有一个包含2个基本选项的菜单,每个片段都有,并且除了这些基本2选项之外,让每个片段添加它自己的选项。 我看到你在扩展活动时如何做到这一点,但我不知道如何用碎片来做。据我所知,调用setHasOptionsMenu(true)只会覆盖Activity的菜单,让片段有自己的菜单,但是它会创建相同菜单选项的副本吗?

1 个答案:

答案 0 :(得分:0)

如您所知,以下代码会将布局扩展到代码中的菜单

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

你在这里可以做的是有两种不同的menu_main.xml,像这样

menu_main_fragmen_1.xml& menu_main_fragmen_2.xml

每个都有两个基本选项,后跟选项,具体取决于它们所属的片段。

现在每次更改活动调用invalidateOptionsMenu()中的片段时,此方法都会调用onCreateOptionsMenu(),因此可以重新绘制菜单。但是这里几乎没有变化,你必须根据片段加载适当的布局

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.

    if(fragment_1 is loaded){
       getMenuInflater().inflate(R.menu.menu_main_fragmen_1.xml, menu);
    }else if(fragment_2 is loaded){
       getMenuInflater().inflate(R.menu.menu_main_fragmen_2.xml, menu);
    }

    return true;
}
  

更新

解决此问题的另一种方法是这样的,假设你有一个menu_main.xml包含所有项目(包括2个基本选项和与所有片段相关的项目)。

在这种情况下,您可以在不属于当前片段时更改项目的可见性

menu.findItem(R.id."id_of_an_item").setVisible(false);