片段显示错误的菜单项

时间:2017-01-15 02:24:34

标签: android android-fragments menu menuitem

由于未知原因,我的片段有时会显示属于不同片段的菜单项。

我有一个带有自定义后台堆栈的活动,可以使用以下方法保持正确的流量:

 Map<Integer, List<Fragment>> fragmentStack = new HashMap<>();

这样每个“标签”都有自己的背板。 我在片段之间切换:

 getSupportFragmentManager().beginTransaction()
    .replace(R.id.container, fragment)
    .commitNow();

片段在Map中维护,因此当切换到现有片段时,我使用它已经初始化的视图。
有时当我从一个片段切换到第二个片段时,第二个片段显示堆栈中先前创建的片段的菜单项,尽管在第二个片段上正确调用了 onCreateOptionsMenu 。 br />
如何克服这种不良行为?

导致此行为的操作:
1.从第一个标签开始。在键0处初始化的映射,List<fragment>带有一个称为A的片段。然后显示该片段。 (片段A具有菜单项)
2.导航到第二个选项卡。在密钥1处初始化的映射,List<fragment>具有一个称为B的片段,显示该片段(替换片段A)。片段B也有菜单项。
3.导航回第一个选项卡。使用先前的片段A,包括它已经初始化的视图(不给新的视图充气)。
4.单击某个导航到新片段C停留在同一个选项卡上。片段C被添加到片段列表中,在Map的键0下。片段C没有菜单项。
5.导航到第二个选项卡。显示先前的片段B但是具有片段A的菜单项!

2 个答案:

答案 0 :(得分:0)

检查onCreateOptionsMenu是否为所有片段调用。

答案 1 :(得分:0)

我最终发现了这个问题。 片段的onCreateView看起来像这样:

if (rootView == null) {
// Init view logic and inflation, and:
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
}
return rootView;

((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);移到if语句之外解决了问题。