在不同 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/