2017-01-15 61 views
0

由于某种原因,我的片段显示属于不同片段的菜单项。片段显示错误的菜单项

我有一个自定义的回堆的单个活动,以保持使用正确的流程:

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

这样,每一个“标签”有它自己的堆栈中。 我的片段之间具有开关:

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

的片段保持在地图,所以切换到现有的片段,当我使用它已经初始化视图。
有时,当我从一个片段切换到另一个片段时,尽管在第二个片段上调用了 onCreateOptionsMenu,但第二个片段显示了先前在堆栈中创建的片段的菜单项。

我该如何克服这种不需要的行为?

导致此行为的操作:
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

你在ViewPager中使用片段? – rupinderjeet

+0

@rupinderjeet不,我正在使用底部导航视图 –

回答

0

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

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

移动((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);固定的问题if语句之外。

0

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

+0

它被调用,并且每个片段的正确菜单都被夸大了。但片段仍显示错误的项目。调试时,即使在点击onCreateOptionsMenu之前,错误的菜单项也是可见的 –