Android 在Fragment或activity中显示与隐藏Menu的菜单
2017-12-26 10:12
501 查看
最近做一个项目,要求在一个activity中加载多个Fragment,用底部导航栏来相互切换,在切换过程中对
Menu菜单的显示与隐藏.
先来分析一下:
android4.0之后引入了fragment的概念,它的生命周期函数和activity几乎一样。对菜单的操作也是通过
onCreateOptionMenu()实现的。
fragment可以通过实现 onCreateOptionMenu() 提供菜单项给activity的选项菜单。为了使这个方法接收
调用,无论如何, 你必须在 onCreate() 期间调用 setHasOptionsMenu() 来指出fragment愿意添加item到选项菜
单(否则, fragment将接收不到对 onCreateOptionsMenu()的调用)
随后从fragment添加到Option菜单的任何项,都会被 追加到现有菜单项的后面.当一个菜单项被选择, fragment
也会接收到 对 onOptionsItemSelected() 的回调.也可以在你的fragment layout中通过调用 registerForContextMenu()
注册一个view来提供一个环境菜单.当用户打开环境菜单, fragment接收到一个对 onCreateContextMenu() 的调用.
当用户选择一个项目, fragment接收到一个对onContextItemSelected() 的调用.
注意: 尽管你的fragment会接收到它所添加的每一个菜单项被选择后的回调, 但实际上当用户选择一个菜单项时,
activity会首先接收到对应的回调.如果activity的on-item-selected回调函数实现并没有处理被选中的项目, 然后事件
才会被传递到fragment的回调.
下面来看看代码 ,目的是我需要在fragment1中显示menu , 在fragment2中隐藏menu
4000
1.要在fragment1 的onCreate() 期间调用 setHasOptionsMenu()
来指出fragment愿意添加item到选项菜单
2.
要在fragment2中隐藏menu
以上是在Fragment中对菜单的显示与隐藏,而在Activity中更简单 , 看代码
Menu菜单的显示与隐藏.
先来分析一下:
android4.0之后引入了fragment的概念,它的生命周期函数和activity几乎一样。对菜单的操作也是通过
onCreateOptionMenu()实现的。
fragment可以通过实现 onCreateOptionMenu() 提供菜单项给activity的选项菜单。为了使这个方法接收
调用,无论如何, 你必须在 onCreate() 期间调用 setHasOptionsMenu() 来指出fragment愿意添加item到选项菜
单(否则, fragment将接收不到对 onCreateOptionsMenu()的调用)
随后从fragment添加到Option菜单的任何项,都会被 追加到现有菜单项的后面.当一个菜单项被选择, fragment
也会接收到 对 onOptionsItemSelected() 的回调.也可以在你的fragment layout中通过调用 registerForContextMenu()
注册一个view来提供一个环境菜单.当用户打开环境菜单, fragment接收到一个对 onCreateContextMenu() 的调用.
当用户选择一个项目, fragment接收到一个对onContextItemSelected() 的调用.
注意: 尽管你的fragment会接收到它所添加的每一个菜单项被选择后的回调, 但实际上当用户选择一个菜单项时,
activity会首先接收到对应的回调.如果activity的on-item-selected回调函数实现并没有处理被选中的项目, 然后事件
才会被传递到fragment的回调.
下面来看看代码 ,目的是我需要在fragment1中显示menu , 在fragment2中隐藏menu
4000
1.要在fragment1 的onCreate() 期间调用 setHasOptionsMenu()
来指出fragment愿意添加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.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);}
2.
要在fragment2中隐藏menu
@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);
}
以上是在Fragment中对菜单的显示与隐藏,而在Activity中更简单 , 看代码
// 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);
相关文章推荐
- Android学习(38) -- 自定义控件(3)点击Menu键显示隐藏菜单
- Android - Fragment 控件Activity里的控件并的显示与隐藏
- Android 在Fragment 中控制 Activity 的控件隐藏和显示
- Android界面设计(左侧隐藏菜单右边显示content)demo
- Android 控件的相对动画实现小说阅读的上下菜单的隐藏与显示
- 使用Fragment+SlidingMenu实现侧滑显示菜单
- Android应用中菜单(Menu)的位置显示问题
- Android动画开发——Animation显示隐藏菜单效果
- Android Fragment管理类,操作Fragment的增加、删除、替换、隐藏、显示等
- Android应用中菜单(Menu)的位置显示问题
- Android零基础入门第88节:Fragment显示和隐藏、绑定和解绑
- 怎么让android系统中隐藏的menu按钮显示出来
- android 开发之 fragment与activity 创建菜单的区别
- Android界面设计(左侧隐藏菜单右边显示content)demo
- Android隐藏/显示Activity的标题栏
- Android Gallery图片显示和文字提示及Menu 菜单
- Android总结:正确判断当前的Fragment是显示还是隐藏
- Android上实现各种风格的隐藏菜单,比如左右滑动菜单、上下滑动显示隐藏菜单
- 一起Talk Android吧(第五十四回:Android中的Fragment显示与隐藏一)
- Android Fragment隐藏显示调用的方法