android - 多 fragment 层次结构中的菜单膨胀问题

标签 android menu android-viewpager fragment toolbar

enter image description here

在不同 fragment 中膨胀不同菜单时面临问题。

我的应用程序层次结构如下: BottomNavigationView --> fragment (4) ---> Tab+ViewPager --> fragment (3)

每个fragment包含ViewPager,ViewPager又包含多个fragment。

请参阅附图以获得更清晰的信息。

问题:不断添加新菜单,或者有时会携带上一屏菜单。

我尝试过使用“menu.clear()”、“getActivity().invalidateOptionsMenu();”

最佳答案

您有ViewPager,这意味着如果您转到第i位置,则位于位置i-1的 fragment >i+1 也将被创建。因此他们的 onCreateOptionsMenu 将被调用,即使你调用 menu.clear() 它也无法正常工作。

解决方案是更改 ViewPager 的容器 Fragment/Activity 中的菜单,方法如下。将 ViewPager.OnPageChangeListener 监听器添加到 ViewPager 中,并在 onPageSelected(intposition) 方法中自行更改菜单:

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

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            int menuResourceId = getMenuResourceByPosition(position); 
            menu.clear();
            inflater.inflate(menuResourceId, menu);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
}

创建方法getMenuResourceByPosition,该方法将根据ViewPager的选定位置为您提供正确的菜单资源ID。

关于android - 多 fragment 层次结构中的菜单膨胀问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48077716/

相关文章:

Android ACTION_BOOT_COMPLETED 每次都调用?

php - 如何在phonegap中处理jsonp的输出?

ios - SWRevealController 包括登录页面 - Swift

java - 弹出菜单没有膨胀

css - 如何使子菜单正确显示

android - 单击子布局中的元素时更改可扩展列表 subview 的背景

java - Android 单元测试和全局静态变量

android - Viewpager 滑动不适用于回收站 View

Android:实现只加载新页面的ViewPager

android - 为什么在页面之间滑动时 TabLayout 的选项卡图标/文本会闪烁?