gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 19:05:42 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com