多片段层次结构中的菜单膨胀问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多片段层次结构中的菜单膨胀问题相关的知识,希望对你有一定的参考价值。
在不同片段中膨胀不同菜单时面临问题。
我的应用程序层次结构如下:BottomNavigationView - > Fragments(4)---> Tab + ViewPager - > Fragments(3)
每个片段包含ViewPager,ViewPager包含多个片段。
请参阅附图以获得更清晰的信息。
问题:它一直在添加新菜单,或者有时会带有前一个屏幕菜单。
我尝试过使用“menu.clear()”,“getActivity()。invalidateOptionsMenu();”
你有ViewPager
,这意味着如果你去i
th位置,也会创建位于i-1
和i+1
位置的碎片。所以他们的onCreateOptionsMenu将被调用,即使你调用menu.clear()它也无法正常工作。
解决方案是以下列方式更改容器Fragment / Activity of 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。
以上是关于多片段层次结构中的菜单膨胀问题的主要内容,如果未能解决你的问题,请参考以下文章
Android:在drawerlayout中使用地图膨胀片段时出错
在 Android Navigation 组件中使用 backstack 打开不同层次结构中的片段