android - Viewpager 中 fragment 的 OptionsMenu 显示彼此的按钮

标签 android android-fragments android-actionbar android-optionsmenu

我在 viewpager 中有三个 fragment 。

其中两个 fragment 有它们自己版本的 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, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

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

主页 Activity 有一个基本的 onCreateOptionsMenu 方法:

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

在onCreate方法中,每个 fragment 调用方法:

setHasOptionsMenu(true);

每个菜单项都有标签:

android:showAsAction="always"

似乎当我打开 Activity 时,所有三个按钮都会出现。 但是,当我滚动浏览它们时,错误的会神奇地消失。 感觉就像 Activity 在创建 Activity 时调用每个 Fragment 的选项菜单,然后在我左右滑动时适本地更改菜单。 我检查了菜单,但不确定出了什么问题。 你认为我需要检查什么吗?我有点没主意。

谢谢!

最佳答案

在您的 ViewPagerOnPageChangeListener 中,将适配器设置为 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.
}

设置 fragment 适配器后,使用以下参数调用相同的方法:

invalidateFragmentMenus(mViewPager.getCurrentItem());

上述语句将防止所有其他 fragment 在 invalidateOptionsMenu() 被调用时不接收对 onCreateOptionsMenu() 方法的调用,只有当前可见的 fragment 将被接收和能够填充选项菜单。

关于android - Viewpager 中 fragment 的 OptionsMenu 显示彼此的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25965750/

相关文章:

Android:是否可以设置与 View 宽度成比例的 View 高度?

java - 如何添加串口api作为库并在android studio中使用它?

android - 从 Listactivity 到 Listfragment

java - 从 ExpandableListView 调用的 Fragment Communicator 接口(interface)不起作用

android - 天气 api 的 JSON 日期解析

java - 从通知栏打开目录

java - Android - 布局 xml 中 EditText 大小的问题

java - 使 ActionBar 图标动态可见/不可见

Android - 将选定的选项卡设为粗体

android - setSupportActionBar 和 setActionBar 之间的区别