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

前端之家收集整理的这篇文章主要介绍了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()方法调用,只有当前可见的片段才能接收并且能够填充选项菜单.

原文链接:https://www.f2er.com/android/312167.html

猜你在找的Android相关文章