android-fragments 在片段的onCreateOptionsMenu处多次调用菜单膨胀

ttvkxqim  于 2022-11-14  发布在  Android
关注(0)|答案(4)|浏览(104)

我使用Fragments,当我切换到实现public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)的嵌套Fragment时,当我到达嵌套Fragment时,我的菜单会膨胀很多次。我如何避免这种情况?我还使用方法实现Fragment的构造函数:

setRetainInstance(true);
setHasOptionsMenu(true);

当我试图实现简单的解决方案时:

@Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     // TODO Add your menu entries here
   if(!isInflated)
         {
         inflater.inflate(R.menu.contacts_archive_menu, menu);
         isInflated = true;
         }
         super.onCreateOptionsMenu(menu, inflater);

 }

但是在屏幕旋转之后我的菜单并没有膨胀。

whhtz7ly

whhtz7ly1#

我通过在离子化之前清除菜单来解决这个问题:

@Override
     public void   onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
          menu.clear();
          inflater.inflate(R.menu.call_menu, menu);
          super.onCreateOptionsMenu(menu, inflater);

     }
uwopmtnx

uwopmtnx2#

只需检查menu项的计数。意味着menu.size()==0,没有menu项存在,然后用layout menu充气,否则根本不充气。

@Override
 public void   onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
      if (menu.size() == 0)
      inflater.inflate(R.menu.call_menu, menu);
      super.onCreateOptionsMenu(menu, inflater);

 }
r6hnlfcb

r6hnlfcb3#

只覆盖invalidateOptionsMenu,例如:

private var isMenuCreated = false

...

override fun invalidateOptionsMenu() {
  Log.d("invalidateOptionsMenu")
  if (!isMenuCreated) {
    super.invalidateOptionsMenu()
  }
}

...

override fun onCreateOptionsMenu(menu: Menu): Boolean {
  ...
  isMenuCreated = true
  return true
}
ecbunoof

ecbunoof4#

更换前使用。

fragment = new EditMyProfile();
 FragmentTransaction fragmentTransactionEditProfile =getSupportFragmentManager().beginTransaction();
 getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
 fragmentTransactionEditProfile.replace(R.id.frame, fragment);
 fragmentTransactionEditProfile.commit();

相关问题