我在观众中有三个片段.
其中两个片段有自己的版本的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; }
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()方法的调用,只有当前可见的片段才能接收并且能够填充选项菜单.