在不同片段中膨胀不同菜单时面临问题。
我的应用程序层次结构如下: BottomNavigationView - >片段(4)---> Tab + ViewPager - >片段(3)
每个片段都包含ViewPager,ViewPager包含多个片段。
请参阅附图以获得更清晰的信息。
问题:它会继续添加新菜单,或者有时会带有上一个屏幕菜单。
我尝试过使用" menu.clear()"," getActivity()。invalidateOptionsMenu();"
答案 0 :(得分:2)
您有ViewPager
,这意味着如果您转到i
位置,也会创建位置i-1
和i+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。