以编程方式在Android中设置可见性
所以,这就是我想知道的。 如何在Android中以编程方式设置菜单的可见性? 这是我的菜单:
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
public boolean onOptionsItemSelected (MenuItem item){
switch (item.getItemId()){
case R.id.menuregistrar:
break;
case R.id.menusalir:
break;
}
return true;
}
但是此代码不在onCreate上,因此我不知道如何以编程方式将一项设置为可见或不可见(就我而言,我希望永久注册了“ menuregistrar”)。
zapotec asked 2020-01-28T14:35:22Z
6个解决方案
134 votes
将此方法放入您的Activity
public boolean onPrepareOptionsMenu(Menu menu)
{
MenuItem register = menu.findItem(R.id.menuregistrar);
if(userRegistered)
{
register.setVisible(false);
}
else
{
register.setVisible(true);
}
return true;
}
在较短的版本中,您可以编写:
MenuItem register = menu.findItem(R.id.menuregistrar);
register.setVisible(!userRegistered); //userRegistered is boolean, pointing if the user has registered or not.
return true;
Adil Soomro answered 2020-01-28T14:35:39Z
9 votes
我将通过以下内容进一步简化Adil的解决方案:
public boolean onPrepareOptionsMenu(Menu menu)
{
MenuItem registrar = menu.findItem(R.id.menuregistrar);
registrar.setVisible(!isRegistered);
return true;
}
jakeneff answered 2020-01-28T14:36:01Z
3 votes
使用public boolean onPrepareOptionsMenu (Menu menu),每当您按下菜单按钮并在那里进行操作时,就会调用它。 或在不同的活动中使用oncreateoptionsmenu()来膨胀不同的菜单-此菜单仅被调用一次。
干杯
Sergey Benner answered 2020-01-28T14:36:26Z
3 votes
菜单对象具有使用setVisible(boolean)//设置菜单项的可见性的属性
例
private Menu menu_change_language;
...
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
...
...
menu_change_language = menu;
...
...
return super.onCreateOptionsMenu(menu);
}
使用下面的代码隐藏菜单项:
if(menu_change_language != null){
menu_change_language.findItem(R.id.menu_change_language)
.setVisible(false);
}
Hantash Nadeem answered 2020-01-28T14:36:54Z
2 votes
如果您想在每次单击菜单时更改onOptionsItemSelected内部的可见性
@Override
public boolean onOptionsItemSelected(MenuItem item) {
item.setVisible(true);
return true;
}
要么菜单中没有单击的项目
private Menu globalMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu."menu Xml Name", menu);
globalMenuItem = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
globalMenuItem.findItem(R.id."id of the menu item").setVisible(true);
return true;
}
guy answered 2020-01-28T14:37:19Z
1 votes
只需执行以下操作即可从此行获取菜单项的ID:
Menu menu =navigationView.getMenu();
MenuItem nav_dashboard = menu.findItem(R.id.nav_dashboard);
然后通过以下行根据您的需要使其可见:
nav_dashboard.setVisible(true/false);
Mukesh Rawat answered 2020-01-28T14:37:43Z