最初隐藏的MenuItem不显示当调用setVisible(true)时

Pol*_*ing 18 android

我有一个基本问题,即最初隐藏的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()事件的调用,因此,如果您要在该函数中设置可见性以进行初始化,则需要考虑,如果您想要显示或不显示该选项.

  • *supportInvalidateOptionsMenu()(他正在使用ABS) (8认同)
  • 如果菜单xml将可见性设置为false,请小心.我在使菜单无效之前设置了可见性,这会重新填充xml,从而忽略了我的setVisibility值 (2认同)

Ale*_*aro 6

我有同样的问题,我发现setVisible(true)当至少有另一个MenuItem可见时,它有效.我希望这对某人有帮助.


ell*_*ing 6

我明白这是个老问题。
但我已经通过放置在里面解决了它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)