旋转时

时间:2015-05-07 19:17:39

标签: android android-actionbar android-menu

我试图找到答案,但没有运气。我有一个片段,其中有一个名为' menu_roi_result_calc'的菜单项。每次屏幕旋转时,都会创建一个新菜单项。代码如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_roi_result_calc, menu);
    return true;
}

然而,在几次屏幕旋转后,这就是我得到的:

multiple actionbar menu items

我感觉这是因为每次旋转都会重新创建菜单项,因此每次旋转时都会添加一个新项目。我如何让它停下来?如何检查项目是否存在并防止再次重新创建项目?任何代码示例将不胜感激。

4 个答案:

答案 0 :(得分:5)

在添加项目之前,您必须清除菜单对象。我遇到了同样的问题,这是我找到的最佳解决方案。

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

答案 1 :(得分:5)

我发现了问题所在。我没有重复使用原始标记的片段。我所要做的就是确保检查savedInstanceState并检查是否已创建标记片段...如果是,则重复使用相同的片段而不是创建新片段。

答案 2 :(得分:1)

作为解决方法,您可以在再次充气之前清除菜单,调用clear

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.clear();
    getMenuInflater().inflate(R.menu.menu_roi_result_calc, menu);
    return true;
}

它会删除菜单中的所有条目,并将其保留为刚刚创建的条目

答案 3 :(得分:1)

当您旋转应用程序时,您的活动将被销毁并创建一个新活动。如果要将片段附加到创建它的活动上,而不是附加旧片段,则会附加一个新片段。为了避免这种情况,我会做类似下面的事情。这将删除所有当前片段并托管您的所有片段。     FragmentManager fm = new FragmentManager(); for(Fragment aFrag : fm.getFragments()) { fm.beginTransaction().remove(aFrag).commit(); } fragment = createFragment(new Fragment()); fm.beginTransaction().add(R.id.YouGetThePicture, fragment).commit();