Fragment用hide/show切换时菜单项处理
当Fragment用hide/show模式切换时,会出现OptionsMenu堆叠,所有页面的菜单项会一起全部显示。因为每个Fragment的onCreateOptionsMenu()方法只会在初始时调用一次,后续切换页面也不会再调用,加了menu.clear()没用。
要实现每个Fragment显示独立的OptionsMenu,只能用其他办法。
这是安卓客户端开发过程中的问题记录。
思路
既然hide/show切换时,系统不会再次调用onCreateOptionsMenu(),那就想办法切换页面后手动重新创建菜单项目。刚好有个方法invalidateOptionsMenu(),调用后会重新请求onPrepareOptionsMenu()方法,可以利用这个重新创建菜单。
实现
在Activity的Fragment切换完毕后,手动调用 invalidateOptionsMenu()方法。
/** * 切换 Fragment */ private void switchFragment(String tag) { // 切换页面操作 this.getSupportActionBar().invalidateOptionsMenu(); }
在fragment里面添加代码
- onCreate()添加setHasOptionsMenu(true);
- 重新onCreateOptionsMenu()方法
- 重新onPrepareOptionsMenu()方法
@Override public void onPrepareOptionsMenu(Menu menu) { if(isVisibleToUser()){ //判断只对当前可见页面生效 onCreateOptionsMenu(menu, requireActivity().getMenuInflater()); } }
说明
以上是typecho客户端开发遇到的一些问题处理,可能不是最优,暂时能实现效果。
安卓客户端已发布到 github,目前还在测试阶段。
该页面采用安卓客户端发布。