繁体   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