Android MenuItem setVisible
问题描述:
我想隐藏/显示menuItem,但得到NPE。它在onPrepareOptionsMenu中工作,但不在onCreate中。默认情况下,它应该是不可见的。Android MenuItem setVisible
例如在我的片段的onCreate我想这样做:
if (condition) menuItem.setvisible(true);
,但它让我NPE上菜单项。
活动
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.inventory_list_toolbar, menu);
return true;
}
@Override
protected void onCreate(final Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_inventory);
mToolbar = findViewById(R.id.inventory_list_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
片段:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu){
super.onPrepareOptionsMenu(menu);
menuItem = menu.findItem(R.id.inventory_list_menu_add);
menuItem.setVisible(false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
答
private Menu menu;
对其进行初始化为
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.
this.menu = menu;
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
当u要隐藏/显示菜单使用
if(menu != null){
MenuItem item_up = menu.findItem(R.id.action_up);
item_up.setVisible(true);
}
答
您不能从onCreate方法隐藏菜单,因为它尚未充气。
你应该让你的逻辑在onPrepareOptionsMenu
方法:
@Override
public void onPrepareOptionsMenu(Menu menu) {
if (condition) {
// do what you want
MenuItem menuItem = menu.findItem(R.id.menu_item_id);
menuItem.setvisible(true);
}
return super.onPrepareOptionsMenu(menu);
}
否则,把你的逻辑onCreateOptionsMenu
方法,并呼吁invalidateOptionsMenu()
当你需要刷新的东西。
请给你的答案添加一些解释。 – ivaigult
声明菜单菜单;'然后将其初始化为@Override public boolean onCreateOptionsMenu(Menu menu){充气菜单;这会将项目添加到操作栏(如果存在)。 this.menu =菜单; getMenuInflater()。inflate(R.menu.main,menu); 返回true; } 如果你想隐藏/显示菜单,使用 if(menu!= null)MenuItem item_up = menu.findItem(R.id.action_up); item_up.setVisible(true); item_up.setVisible(true); } –
@AkshayChopde:编辑答案的解释,不要将它添加为注释 –