[英]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.