我有一个基本的问题,一个最初隐藏的MenuItem无法切换到可见。作为一个警告,我正在使用ActionBarSherlock,但我想看看是否有人知道这是Android的已知问题,或者在调查这是否是ABS内部的问题之前,我正在做一些可怕的事情。代码如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu_xml, menu);
mMenuItem = menu.findItem(R.id.menu_item);
mMenuItem.setVisible(false);
return true;
}
// Somewhere elsewhere
// MenuItem is never visible after this line is executed
mMenuItem.setVisible(true);
我还尝试将mMenuItem赋值和可见性转移到对onPrepareOptionsMenu的调用中,但显示了相同的行为。
谢谢!
发布于 2012-07-31 23:12:30
问题是你没有告诉Android它需要更新菜单。在我找到解决方案之前的最后一个小时里,这让我抓狂。我不认为这在之前的HC上很明显,因为菜单项并不总是像在HC+中那样在屏幕上可见。
在您的活动中,只需调用:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
这将再次触发对onCreateOptionsMenu()事件的调用,因此,如果要在该函数中设置可见性以进行初始化,则需要考虑是否显示该选项。
发布于 2014-01-30 18:22:42
我也遇到了同样的问题,我发现当至少有另一个MenuItem
可见时,setVisible(true)
才能正常工作。我希望这能对某些人有所帮助。
发布于 2016-08-11 15:01:53
我知道这是个老问题了。
但是我已经解决了这个问题,把它放在onPrepareOptionMenu() {...}
中
private boolean mShowVisible=false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_item).setVisible(mShowVisible);
return super.onPrepareOptionsMenu(menu);
}
无论何时想要设置为可见或不只是调用它为:
mShowVisible = true; // or false
invalidateOptionMenu();
https://stackoverflow.com/questions/11422441
复制相似问题