2014-11-04 54 views
1

我想,當我加載fragment.I我使用這個代碼在主要活動中加載另一個菜單的xml:更改動作條菜單中的片段

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

我使用這個代碼片段:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 
@Override 
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) { 
    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

當用戶加載片段時,活動菜單應該刪除,然後片段菜單應該加載到操作欄。 當用戶從片段中點擊後退按鈕時,片段菜單應該刪除,然後主要活動菜單應加載到操作欄。

現在這段代碼並沒有刪除舊菜單,而是將新菜單添加到舊菜單附近。

我該怎麼做?

+0

使用invalidateOptionsMenu()這個... – 2014-11-04 12:22:06

+0

我應該在哪裏放呢? – 2014-11-04 12:24:31

回答

3

可以使用menu.clear();方法。

它將刪除菜單中的所有現有項目,並將其保留爲空,就像它剛剛創建一樣。

試試這個..

@Override 
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) { 
    menu.clear(); // clears all menu items.. 
    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 
+0

它現在正在清理,但我還有一個問題。當用戶單擊以從片段後退按鈕時,我正在運行invalidateOptionsMenu(),但仍顯示片段菜單。 – 2014-11-04 12:45:39

+0

如果你想刪除舊的菜單項..它最好先使用menu.clear()方法..它的簡單而有用。 – 2014-11-04 12:50:05

+0

你弄錯了。我在活動中將清除選項設置爲oncreateoptionsmenu,但是當我嘗試從操作欄中仍然顯示片段菜單的碎片中退出時。我認爲按下後退按鈕時,oncreateoptionsmenu不再運行。 – 2014-11-04 12:52:29

1

試試這個:

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

希望它可以幫助

+0

不,還是一樣。 – 2014-11-04 12:24:05