onCreateOptionsMenu
onCreateOptionsMenu
----只在Activity創(chuàng)建時調(diào)用一次!之后不會再被調(diào)用!
onPrepareOptionsMenu
----每次display menu之前,都會調(diào)用該方法,
只要按一次menu按鍵,就會調(diào)用一次。
所以你會發(fā)現(xiàn)每次只要按一次menu按鍵,
menu選單就會多兩個(因為我們預(yù)設(shè)是兩個)
你可以利用onPrepareOptionsMenu來做update menu狀態(tài)的動作
?
?? 所以如果在menu創(chuàng)建之后,想對menu進行動態(tài)的修改,那么就不能再對onCreateOptionsMenu做修改,要重寫onPrepareOptionsMenu(Menumenu)方法。
????注意:在使用onPrepareOptionsMenu的時候,如果你每次都調(diào)用了menu.add()方法的話,那么菜單中的項目就會越來越多,所以,一般情況下是要調(diào)用一下menu.clear()的。
super.onPrepareOptionsMenu(menu);
menu.clear();
?
?
?
在fragment中的onCreateOptionsMenu和Activity中的參數(shù)不同的,多了個MenuInflater,所以在fragment中調(diào)用MenuInflater的時候,要這么調(diào)用:
MenuInflater inflater =?this.getActivity().getMenuInflater();
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// 在onCreateOptionsMenu()之前必須在onCreate中調(diào)用setHasOptionsMenu(true)
inflater.inflate(R.menu.menu_three, menu); ??
super.onCreateOptionsMenu(menu, inflater);
}
?
Fragment通過實現(xiàn)onCreateOptionsMenu()方法給Activity的可選菜單(包括動作欄)提供菜單項,但是為了這個方法能夠接受調(diào)用,必須在onCreate()方法中調(diào)用setHasOptionsMenu()方法來指示這個Fragment應(yīng)該作為可選菜單的添加項(否則,這個Fragment不接受對onCreateOptionsMenu()方法的調(diào)用)。
然后,你把來自Fragment的要添加到可選菜單中項目追加到既存的菜單中。當菜單項被選擇時,這個Fragment也接受onOptionsItemSelected()的回調(diào)。
你也能夠通過調(diào)用registerForContextMenu()方法在Fragment布局中注冊一個視圖來提供一個上下文菜單。當用戶打開上下文菜單時,Fragment會接受對onCreateContextMenu()方法的調(diào)用。當用戶選擇一個菜單項時,Fragment會接受對onContextItemSelected()方法的調(diào)用。
注意:盡管Fragment添加的每個菜單項都接受一個on-item-selected回調(diào),但是當用戶選擇一個菜單項時,對應(yīng)的Activity會首先受到相應(yīng)的回調(diào)。如果Activity的on-item-selected回調(diào)的實現(xiàn)不處理被選擇的項目,那么事件會被傳遞給Fragment的回調(diào)。這是真正的可選菜單和上下文菜單。
關(guān)于菜單的更多信息,請看菜單(Menus)和動作欄(Action Bar)開發(fā)指南。
轉(zhuǎn)載于:https://www.cnblogs.com/mingfeng002/p/3432929.html
總結(jié)
以上是生活随笔為你收集整理的onCreateOptionsMenu的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种延时跳转代码
- 下一篇: 3d翻转 ios_iOS自定义转场详解0