MenuItem 未正确设置可见性
MenuItem not setting visibility properly
我得到了菜单项,然后尝试设置可见性,但菜单项始终显示。谁能看出我哪里出错了?
菜单项不为空,因此已分配,所以不是。
MenuItem done = menu.findItem(R.id.action_done);
//animate the list view
if (isListEditing) {
done.setVisible(true);
menuItem.setTitle(this.getString(R.string.EditKey));
isListEditing = false;
adapter.endEdit();
} else {
done.setVisible(false);
menuItem.setTitle(this.getString(R.string.DoneKey));
isListEditing = true;
adapter.makeEditable();
}
this.invalidateOptionsMenu();
我在此处获取菜单参考:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_test_results, menu);
this.menu = menu;
return true;
}
更新:
我的印象是您在进行编辑后必须使选项菜单无效。但这就是导致编辑无法通过的原因。
不需要
this.invalidateOptionsMenu();
把它取下来,它应该可以正常工作。
根据 docs,invalidateOptionsMenu() 所做的是:
Declare that the options menu has changed, so should be recreated. The onCreateOptionsMenu(Menu) method will be called the next time it needs to be displayed.
这意味着将再次调用 onCreateOptionsMenu,扩大您的原始菜单布局,从而放弃您之前对菜单项可见性的更改。
动态修改菜单内容的推荐方法是使用onPrepareOptionsMenu。所以每当你需要更新菜单项时,你可以调用invalidateOptionsMenu(),然后在onPrepareOptionsMenu中,你设置菜单项的可见性。
我得到了菜单项,然后尝试设置可见性,但菜单项始终显示。谁能看出我哪里出错了?
菜单项不为空,因此已分配,所以不是。
MenuItem done = menu.findItem(R.id.action_done);
//animate the list view
if (isListEditing) {
done.setVisible(true);
menuItem.setTitle(this.getString(R.string.EditKey));
isListEditing = false;
adapter.endEdit();
} else {
done.setVisible(false);
menuItem.setTitle(this.getString(R.string.DoneKey));
isListEditing = true;
adapter.makeEditable();
}
this.invalidateOptionsMenu();
我在此处获取菜单参考:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_test_results, menu);
this.menu = menu;
return true;
}
更新:
我的印象是您在进行编辑后必须使选项菜单无效。但这就是导致编辑无法通过的原因。
不需要
this.invalidateOptionsMenu();
把它取下来,它应该可以正常工作。
根据 docs,invalidateOptionsMenu() 所做的是:
Declare that the options menu has changed, so should be recreated. The onCreateOptionsMenu(Menu) method will be called the next time it needs to be displayed.
这意味着将再次调用 onCreateOptionsMenu,扩大您的原始菜单布局,从而放弃您之前对菜单项可见性的更改。
动态修改菜单内容的推荐方法是使用onPrepareOptionsMenu。所以每当你需要更新菜单项时,你可以调用invalidateOptionsMenu(),然后在onPrepareOptionsMenu中,你设置菜单项的可见性。