首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >最初调用setVisible(true)时不显示隐藏的MenuItem

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

Stack Overflow用户
提问于 2012-07-11 05:39:44
回答 4查看 8.8K关注 0票数 20

我有一个基本的问题,一个最初隐藏的MenuItem无法切换到可见。作为一个警告,我正在使用ActionBarSherlock,但我想看看是否有人知道这是Android的已知问题,或者在调查这是否是ABS内部的问题之前,我正在做一些可怕的事情。代码如下:

代码语言:javascript
复制
@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的调用中,但显示了相同的行为。

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2012-07-31 23:12:30

问题是你没有告诉Android它需要更新菜单。在我找到解决方案之前的最后一个小时里,这让我抓狂。我不认为这在之前的HC上很明显,因为菜单项并不总是像在HC+中那样在屏幕上可见。

在您的活动中,只需调用:

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}

这将再次触发对onCreateOptionsMenu()事件的调用,因此,如果要在该函数中设置可见性以进行初始化,则需要考虑是否显示该选项。

票数 26
EN

Stack Overflow用户

发布于 2014-01-30 18:22:42

我也遇到了同样的问题,我发现当至少有另一个MenuItem可见时,setVisible(true)才能正常工作。我希望这能对某些人有所帮助。

票数 6
EN

Stack Overflow用户

发布于 2016-08-11 15:01:53

我知道这是个老问题了。

但是我已经解决了这个问题,把它放在onPrepareOptionMenu() {...}

代码语言:javascript
复制
private boolean mShowVisible=false;

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

     menu.findItem(R.id.menu_item).setVisible(mShowVisible);

     return super.onPrepareOptionsMenu(menu);
}

无论何时想要设置为可见或不只是调用它为:

代码语言:javascript
复制
mShowVisible = true; // or false
invalidateOptionMenu();
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11422441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档