簡體   English   中英

無法以編程方式隱藏操作欄菜單項

[英]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);

  1. 首先在活動中全局保存菜單-

     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; } 
  2. 為您提供不同的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>
  1. 現在,要隨時刪除選項菜單,請執行以下操作-

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM