Android 避免在片段中重新创建以编程方式创建的menuitem

Android 避免在片段中重新创建以编程方式创建的menuitem,android,android-fragments,android-toolbar,android-menu,oncreateoptionsmenu,Android,Android Fragments,Android Toolbar,Android Menu,Oncreateoptionsmenu,我的问题是如何防止每次片段恢复时,通过编程创建的工具栏菜单项(带子菜单的菜单)被xml布局覆盖。 我只想在第一次创建片段时创建昂贵的工具栏菜单项,而不是在片段恢复时创建 我在onCreateOptions菜单()中展开工具栏,并存储菜单项的一个实例 private MenuItem menuItem; 私有子菜单ExpressionSubmenu @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater

我的问题是如何防止每次片段恢复时,通过编程创建的工具栏菜单项(带子菜单的菜单)被xml布局覆盖。 我只想在第一次创建片段时创建昂贵的工具栏菜单项,而不是在片段恢复时创建

我在onCreateOptions菜单()中展开工具栏,并存储菜单项的一个实例

private MenuItem menuItem;
私有子菜单ExpressionSubmenu

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    inflater.inflate(R.menu.menu_layout, menu);
    menuItem= menu.findItem(R.id.menuItem);
}
异步加载程序完成后,将填充menuItem

   @Override
    public void onLoadFinished(Loader<> loader, Data data) {
                 //Expensive call
          expensiveSubmenu= makeExpensiveSubMenu(menuItem, data);
}
@覆盖
public void onLoadFinished(加载器,数据){
//昂贵的电话
expensiveSubmenu=生成expensiveSubmenu(菜单项,数据);
}
现在,菜单已完全填充并在工具栏中可见,我还有一个子菜单的实例


因为每次恢复片段时都会调用onCreateOptionsMenu(),所以我的菜单会被xml布局覆盖,我必须再次创建昂贵的子菜单。mehtod like menu.ADD子菜单(menu)可以满足我的需求,但我找不到。如果您有任何想法,我们将不胜感激。

非主题评论:制作
makeExpensiveSubMenu
makeNotExpensiveSubMenu
或使用菜单以外的其他内容。。。你能分享一下为什么它如此昂贵(不是代码-你在那里做什么)-也许有人可以帮你…因为你只有两个选择:根本不重新创建整个活动(通过阻止配置更改)或者。。。使用其他方法,然后menumakeExpensiveSubMenu()进行多个REST调用以构建树层次结构。然后不要执行此操作。。。。只需将数据与UI分离。。。作为某个POJO类,只构建一次树层次结构。。。在OnCreateOptions菜单中,只需从缓存数据创建菜单…fx。如果您将树层次结构的构建移动到abstractloader实现的
loadInBackground
,并将onLoadFinished更改为
onLoadFinished(Loader Loader,MyTreeDataPOJO data){notSoExpensiveSubmenu=DonNotUseresthereBuildMenuFromData(data);}
我认为将树拆分为pojo是正确的方法。谢谢