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

时间:2018-01-03 12:45:59

标签: android menu android-viewpager fragment toolbar

enter image description here

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

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

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

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

问题:它会继续添加新菜单,或者有时会带有上一个屏幕菜单。

我尝试过使用" menu.clear()"," getActivity()。invalidateOptionsMenu();"

1 个答案:

答案 0 :(得分:2)

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

解决方案是以下列方式更改 ViewPager 的容器片段/活动中的菜单。将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。