无法以编程方式隐藏操作栏菜单项

时间:2016-04-05 04:36:38

标签: java android

如果共享首选项为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);
}

我做错了什么?

5 个答案:

答案 0 :(得分:4)

这样做的正确位置是setNoAccessTokenPolicy。来自docs

  

准备要显示的屏幕标准选项菜单。这是   每次显示菜单时,都会在菜单显示之前调用。您可以   使用此方法有效地启用/禁用项目或其他   动态修改内容。

因此,我建议您覆盖onPrepareOptionsMenu,然后检查其中的共享首选项并相应地显示菜单。像,

onPrepareOptionsMenu

答案 1 :(得分:1)

试试这个

def tupleNonTrivialSumation(s):
    '''return a 3-tuple of x,y,z : x+y+z=0 & the list does not contain (0,0,0)'''
    return tuple([(x,y,z) for x in s for y in s for z in s if x+y+z==0 if abs(x)+abs(y)+abs(z)!=0])`

我希望它对你有用。

答案 2 :(得分:0)

试试这个

invalidateOptionsMenu();

我希望它对你有所帮助。

答案 3 :(得分:0)

获取指向此项目的MenuItem,调用其上的setVisible以调整其可见性,然后在您的活动上调用invalidateOptionsMenu(),以便相应地调整ActionBar菜单。

更新:MenuItem不是布局的常规视图。它的特殊之处,完全不同。您的代码为item返回null,这导致崩溃。你需要做的是:

MenuItem item = menu.findItem(R.id.addAction);

答案 4 :(得分:0)

  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而另一个是 包含你想要的物品。

  3. 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);