最近做一个项目,要求在一个activity中加载多个Fragment,用底部导航栏来相互切换,在切换过程中对
Menu菜单的显示与隐藏.
先来分析一下:
android4.0之后引入了fragment的概念,它的生命周期函数和activity几乎一样。对菜单的操作也是通过
onCreateOptionMenu()实现的。
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); }
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater);
menu.add(0, 1, 0, "新建").setIcon(R.mipmap.icon_menu_add) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
//对整个菜单进行显示 menu.setGroupVisible(R.menu.menu_main, true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1:
//完成菜单点击的操作
break
; }
return super
.onOptionsItemSelected(item);}
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.setGroupVisible(R.menu.menu_main,false); }
// 1. 定义mMenu成员变量 private Menu mMenu; // 2. 在onCreateOptionsMenu()里初始化mMenu,并隐藏Menu item @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); mMenu = menu; mMenu.findItem(R.id.menu_tem).setVisible(false); return true;} //使用findItem()通过item ID找到Item。使用getVisible(false)来隐藏Menu Item。 //在onCreateOptionsMenu()中调用setVisible(false),会使Menu Item默认隐藏。 // 3. 在想显示menu item的时候,调用setVisible(true)即可。 mMenu.findItem(R.id.menu_tem).setVisible(true);