首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ActionBar中的onPrepareOptionsMenu重复项目

ActionBar中的onPrepareOptionsMenu重复项目
EN

Stack Overflow用户
提问于 2012-02-29 08:10:25
回答 3查看 5.4K关注 0票数 3

当我使用onPrepareOptionsMenu添加菜单项时,菜单项在操作栏中复制其自身。我在main活动中使用片段并在ActionBar中创建初始菜单,如下所示:

代码语言:javascript
运行
复制
...
 @Override
    public boolean onCreateOptionsMenu(Menu paramMenu) {
    super.onCreateOptionsMenu(paramMenu);
    paramMenu.add(0, 1, 0, "DashBoard").setIcon(R.drawable.ic_dashboard)
        .setShowAsAction(1);
    return true;
    }

然后,我在其中一个片段中添加另一个项目,如下所示:

代码语言:javascript
运行
复制
...
@Override
    public void onPrepareOptionsMenu(Menu paramMenu) {
    paramMenu.add(0, 2, 1, "FullScreen").setIcon(R.drawable.ic_fullscreen)
        .setShowAsAction(1);
    }

由于某种原因,这个通过fragment类添加的项显示了两次...我有什么问题吗?

对我所犯错误的任何帮助都将不胜感激

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-29 08:51:28

该项目可能会显示两次,因为您正在添加它两次。请参阅docs for onPrepareOptionsMenu

这是在菜单显示之前调用的,每次菜单显示的时候。

我真的不会盲目地在onPrepareOptionsMenu中添加项目。您应该先检查它是否已经被添加。

票数 4
EN

Stack Overflow用户

发布于 2013-05-16 16:48:20

在菜单显示之前,每次都会调用onPrepareOptionsMenu

onPrepareOptionsMenu()中使用menu.clear(),然后添加新菜单项。

票数 14
EN

Stack Overflow用户

发布于 2015-06-14 00:42:37

我在活动中使用片段,并使用swipe在它们之间切换。我的主活动有一些菜单项,但我使用我的片段在运行时动态添加一个菜单项,即当片段变为可见时。我的碎片的oncreateOptions方法如下所示:菜单项现在只出现一次

代码语言:javascript
运行
复制
  @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        //menu.clear();
        if(menu.size() == 1) {
            // inflater.inflate(R.menu.dashboard_main,menu);
            MenuItem mit = menu.add("Refresh");
            mit.setIcon(android.R.drawable.stat_notify_sync);
            mit.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        }
    }

另一种可能的修复方法是,只有当instancestate为null时,您才能将片段添加到您的活动中,因为到那时,您的活动将丢弃该片段,因此,有必要使用其菜单项重新创建该片段。

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

https://stackoverflow.com/questions/9491800

复制
相关文章

相似问题

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