我有一个基本问题,即最初隐藏的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);
Run Code Online (Sandbox Code Playgroud)
我还尝试将mMenuItem赋值和可见性移动到对onPrepareOptionsMenu的调用,但显示了相同的行为.
谢谢!
Ton*_*aro 25
问题是你没有告诉Android它需要更新菜单.这让我坚持了最后一小时,直到我找到了解决方案.我不认为它在pre-HC上显而易见,因为菜单项并不总是在屏幕上可见,就像它们在HC +中一样.
在您的活动中,只需致电:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud)
这将再次触发对onCreateOptionsMenu()事件的调用,因此,如果您要在该函数中设置可见性以进行初始化,则需要考虑,如果您想要显示或不显示该选项.
我明白这是个老问题。
但我已经通过放置在里面解决了它onPrepareOptionMenu() {...}
private boolean mShowVisible=false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_item).setVisible(mShowVisible);
return super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
无论何时您想设置可见或不只是将其称为:
mShowVisible = true; // or false
invalidateOptionMenu();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7403 次 |
| 最近记录: |