【问题标题】:Menu inflating issue in Multiple fragment hierarchy多片段层次结构中的菜单膨胀问题
【发布时间】:2018-01-03 12:45:58
【问题描述】:

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

我的应用层次结构是这样的: BottomNavigationView --> Fragments(4) ---> Tab+ViewPager --> Fragments(3)

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

请查看附图以获得更清晰的信息。

问题:不断添加新菜单,或者有时会携带上一个屏幕菜单。

我尝试过使用“menu.clear()”、“getActivity().invalidateOptionsMenu();”

【问题讨论】:

  • 还有什么问题?描述一下
  • @MishaAkopov 谢谢!它不断添加新菜单。如果我使用menu.clear(),有时会携带上一个屏幕菜单。

标签: android menu android-viewpager fragment toolbar


【解决方案1】:

你有ViewPager,这意味着如果你去ith位置,也会创建在位置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。

【讨论】:

  • 我使用了你的代码,不知何故能够加载相关菜单,但菜单项在更改选项卡时立即消失。
  • 从底部导航菜单选项卡?也许你还有menu.clear() 的地方?还在上层设置菜单设置登录:在选项卡选择上。
  • 我用过 setMenuVisibility(false),它正在制造问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多