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