多片段层次结构中的菜单膨胀问题

Menu inflating issue in Multiple fragment hierarchy

在不同片段中展开不同菜单时遇到问题。

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

每个片段包含 ViewPager,ViewPager 包含多个片段。

为了更清楚,请查看所附图片。

问题: 一直在添加新的菜单,或者有时会保留之前的屏幕菜单。

我试过使用 "menu.clear()"、"getActivity().invalidateOptionsMenu();"

您有ViewPager,这意味着如果您转到第i个位置,也会创建位置i-1i+1上的片段。所以他们的 onCreateOptionsMenu 将被调用,即使你调用 menu.clear() 它也不会正常工作。

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

@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。