[英]Can't hide actionbar menu item programatically
如果共享首選項為false,我試圖隱藏Actionbar菜單項。
我可以根據需要獲取共享的首選項,但是菜單項不會隱藏。
// Inflate a menu to be displayed in the toolbar
toolbar.inflateMenu(R.menu.activity_main_actionbar);
// Enable disable set start page item
if(!sharedPref.getBoolean("enable_custom_startpage", false)) {
toolbar.getMenu().findItem(R.id.setasstartpage).setVisible(false);
}
我究竟做錯了什么??
正確的位置是onPrepareOptionsMenu
。 從文檔中 ,
准備要顯示的屏幕標准選項菜單。 在顯示菜單之前,每次顯示菜單時都會調用此方法。 您可以使用此方法有效地啟用/禁用項目,或者以其他方式動態修改內容。
因此,我建議您重寫onPrepareOptionsMenu
,然后檢查其中的Shared Prefs並相應顯示菜單。 就像是,
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// Enable disable set start page item
if(!sharedPref.getBoolean("enable_custom_startpage", false)) {
toolbar.getMenu().findItem(R.id.setasstartpage).setVisible(false);
}
return true;
}
嘗試這個
mToolbar.getMenu().findItem(id).setEnabled(false);
希望它對您有用。
嘗試這個
invalidateOptionsMenu();
希望對您有幫助。
獲取一個指向該項目的MenuItem,在其上調用setVisible調整其可見性,然后在您的活動上調用invalidateOptionsMenu(),以便相應地調整ActionBar菜單。
更新:MenuItem不是布局的一部分的常規視圖。 它與眾不同,完全不同。 您的代碼為該項返回null,這導致崩潰。 您需要做的是:
MenuItem item = menu.findItem(R.id.addAction);
首先在活動中全局保存菜單-
Menu menuu; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. menuu=menu; getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
為您提供不同的menu.xml。 一個是noitem,另一個是包含您想要的項目。
menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.afixi.prasenjeetpati.notification_service.MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
</menu>
menu_blank.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.afixi.prasenjeetpati.notification_service.MainActivity">
</menu>
現在,要隨時刪除選項菜單,請執行以下操作-
menuu.clear(); getMenuInflater().inflate(R.menu.menu_blank, menuu);
並返回正常菜單
menuu.clear(); getMenuInflater().inflate(R.menu.menu_main, menuu);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.