2017-01-15 80 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之前,錯誤的菜單項也是可見的 –