2015-10-13 45 views
3

我有一個項目使用抽屜和滑動選項卡,我使用this教程創建。我正在使用支持庫爲較舊的Android版本提供Material Design。我也使用ToolBar而不是ActionBar。我有一個菜單attatched該工具欄:如何在工具欄中爲不同的片段設置不同的菜單?

toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); 
    toolbar.inflateMenu(R.menu.menu_main); 

我正在努力與每個片段有特定的菜單。我嘗試了許多其他類似問題的答案,如thisthis無濟於事。大多數人建議執行these methods,但他們似乎只適用於ActionBar和在我的情況下,我有一個android.support.v7.widget.Toolbar

我也使用

toolbar.getMenu().findItem(R.id.menuitem).setVisible(false); 
supportInvalidateOptionsMenu(); 

嘗試,但它也不起作用。在這種情況下,我的菜單就消失了。

我一直在尋找和掙扎這個星期來利用。難道我做錯了什麼?

如何爲每個片段設置特定的菜單?我認爲隱藏菜單項可能是實現這一目標的更容易的選擇,但如果你們有任何其他方式來實現這一點,我將不勝感激。

+0

您是否在您的活動中的某個位置調用了setSupportActionBar(工具欄)?你應該這樣做,並在onCreateOptionsMenu()方法中增加你的菜單。在那裏你可以處理你的菜單邏輯(無論是通過隱藏還是膨脹不同的菜單),正如你所說的調用supportInvalidateOptionsMenu();當你在片段之間切換時重新創建它。 –

+0

但是,如果我調用setSupportActionBar(工具欄)我的ActionBarDrawerToggle以某種方式停止工作。 –

+0

我不認爲我們可以幫助你,除非你提供更多的代碼,並解釋一下在每種情況下會發生什麼。我認爲我所說的似乎是正確的路要走,所以請讓我們確切地知道這種方法會發生什麼。 –

回答

2

當您設置工具欄(可能在onCreate)並在onCreateOptionsMenu(Menu menu)方法中像往常一樣充氣菜單時,應該調用setSupportActionBar(toolbar)。 在這種方法中,您可以處理不同的菜單,無論是通過隱藏項目還是僅基於片段膨脹不同的菜單。

然後,如您所說,請致電supportInvalidateOptionsMenu();當您在片段之間更改以重新創建菜單時。

+1

我想調用supportInvalidateOptionsMenu(),但[this](http://stackoverflow.com/a/8309255/3739186)答案提供了一個更優雅的方式來實現,通過'onCreate'方法調用'setHasOptionsMenu(true)'每個片段,這節省了我的一些代碼行。 ;) –

+0

是的,這工作得很好,似乎更清潔,沒有想到這一點。 –

+0

也適合我。我發現在支持庫和集成API混合的迷宮中不會迷失方向。 –

相關問題