由于未知原因,我的片段有时会显示属于不同片段的菜单项。
我有一个带有自定义后台堆栈的活动,可以使用以下方法保持正确的流量:
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的菜单项!
答案 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语句之外解决了问题。