android – Viewpager中的Fragments的OptionsMenu显示对方的按钮

我在观众中有三个片段.

其中两个片段有自己的版本的onCreateOptionsMenu方法

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

    // Set up 1 action button
    inflater.inflate(R.menu.home_snapshot_add,menu);
}

@Override
public void onCreateOptionsMenu(Menu menu,inflater);

    // Set up 2 action buttons
    inflater.inflate(R.menu.home_snapshot_send,menu);
}

home活​​动有一个基本的onCreateOptionsMenu方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    return false;
}

在onCreate方法中,每个片段调用方法

setHasOptionsMenu(true);

每个菜单项有标签

android:showAsAction="always"

看起来像我打开活动,所有三个按钮出现.
然而,当我滚动他们,错误的人神奇地消失.
感觉就像活动在活动创建时调用每个片段的选项菜单,然后在我左右滑动时适当地更改菜单.
我已经检查了菜单,但不知道有什么问题.
任何你认为我需要检查?我有点想法.

谢谢!

解决方法

在您的ViewPager的OnPagechangelistener中,并且将适配器设置为ViewPager后,请具有以下功能
@Override
public void onPageSelected(int position){
   invalidateFragmentMenus(position);
}


private void invalidateFragmentMenus(int position){
   for(int i = 0; i < mViewPagerFragentAdapter.getCount(); i++){
      mViewPagerAdapter.getItem(i).setHasOptionsMenu(i == position);
   }
   invalidateOptionsMenu(); //or respectively its support method.
}

在使用以下参数调用片段适配器调用相同的方法后:

invalidateFragmentMenus(mViewPager.getCurrentItem());

当invalidateOptionsMenu()被调用时,上述语句将阻止所有其他片段不接受onCreateOptionsMenu()方法调用,只有当前可见的片段才能接收并且能够填充选项菜单.

相关文章

Android 通过adb shell命令查看内存,CPU,启动时间,电量等...
Monkey Android app稳定性测试工具之Monkey使用教程 by:授客...
Android 常见adb命令 by:授客 QQ:1033553122 1、 查看所有已...
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...