Fragment用hide/show切换时菜单项处理

当Fragment用hide/show模式切换时,会出现OptionsMenu堆叠,所有页面的菜单项会一起全部显示。因为每个Fragment的onCreateOptionsMenu()方法只会在初始时调用一次,后续切换页面也不会再调用,加了menu.clear()没用。
要实现每个Fragment显示独立的OptionsMenu,只能用其他办法。

这是安卓客户端开发过程中的问题记录。

思路

既然hide/show切换时,系统不会再次调用onCreateOptionsMenu(),那就想办法切换页面后手动重新创建菜单项目。刚好有个方法invalidateOptionsMenu(),调用后会重新请求onPrepareOptionsMenu()方法,可以利用这个重新创建菜单。

实现

  1. 在Activity的Fragment切换完毕后,手动调用 invalidateOptionsMenu()方法。

    /**
      * 切换 Fragment
      */
    private void switchFragment(String tag) {
     // 切换页面操作
     this.getSupportActionBar().invalidateOptionsMenu();
    }
  2. 在fragment里面添加代码

    • onCreate()添加setHasOptionsMenu(true);
    • 重新onCreateOptionsMenu()方法
    • 重新onPrepareOptionsMenu()方法
    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        if(isVisibleToUser()){ //判断只对当前可见页面生效
            onCreateOptionsMenu(menu, requireActivity().getMenuInflater());
        }
    }

说明

以上是typecho客户端开发遇到的一些问题处理,可能不是最优,暂时能实现效果。

安卓客户端已发布到 github,目前还在测试阶段。
该页面采用安卓客户端发布。
THE END

标签: 无

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。