首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FragmentStatePagerAdapter后重复菜单和片段中的数据

使用FragmentStatePagerAdapter后重复菜单和片段中的数据
EN

Stack Overflow用户
提问于 2015-12-18 06:32:38
回答 1查看 615关注 0票数 2

我尝试了这么多的答案,在这里提供了不同的帖子,但没有什么对我有用。

问题----我有导航抽屉,其中有6个片段,但只有一个活动。一切都很顺利,直到我把抽屉里的第一位碎片换成了。我想在第一个片段里滑动标签。所以我用了FragmentStatePagerAdapter

  • 每个片段都有自己的菜单和MainActivity菜单。 @Override void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//通知系统允许该片段的选项菜单。setHasOptionsMenu(true);} 像这样膨胀: @覆盖公共无效onCreateOptionsMenu(菜单,MenuInflater充气器){ inflater.inflate(R.menu.story,菜单);}
  • 一切都很好。但是当我访问导航抽屉中的其他片段时,它会在工具栏中显示重复的菜单。当我访问其他片段时,如果工具栏中还留有空间,它会创建更多的重复项。

尝试1:为了解决这个问题,我最初使用了:

代码语言:javascript
复制
@Override
public void onPrepareOptionsMenu(Menu menu) {
    menu.clear();
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.story, menu);
}

这样我就没有复制菜单了,但是现在我看不到MainActivity menus了。

Try 2

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    getActivity().invalidateOptionsMenu();
    inflater.inflate(R.menu.story, menu);
}

通过这个,我得到了片段和活动菜单,但是有重复的。

这应该很容易解决,但我并没有找到一个方法来处理这个问题。也许我对生命周期不太了解?

,我的另一种方法,--用片段实现所有菜单将起作用,但这应该是我们最后的选择。

解决方案-为了维护这两个菜单,我所要做的就是这个(非常简单的解决方案):

代码语言:javascript
复制
menu.clear();
inflater.inflate(R.menu.story, menu);
getActivity().getMenuInflater().inflate(R.menu.main, menu);

问题2 OnOptionsItemSelected方法从第1片段开始在其他片段中被调用。

EN

回答 1

Stack Overflow用户

发布于 2015-12-18 07:37:22

代码语言:javascript
复制
  private void hideAllMenuItems() {
        if (actionBarMenu != null) {
            actionBarMenu.findItem(R.id.action_item1).setVisible(false);
            actionBarMenu.findItem(R.id.action_item2).setVisible(false);
        }
    }


    private void showMenuIcon() {
        if (actionBarMenu != null) {
            hideAllMenuItems();
            if (currentFragment instanceof Fragment1)
                actionBarMenu.findItem(R.id.action_item1).setVisible(true);

            else if (currentFragment instanceof Fragment2)
                actionBarMenu.findItem(R.id.action_item2).setVisible(true);

        }
    }

每次加载新片段时调用shoeMenuIcon()。

希望你在找这个

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34349728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档