使用ActionBarSherlock时,选项菜单不会动态更新

问题描述:

我需要: 使用“登录”选项创建选项菜单,当用户登录时需要更改为“注销”,当用户再次点击菜单按钮时使用ActionBarSherlock时,选项菜单不会动态更新

当使用纯SDK使用兼容性库V4 然而,当使用ActionBarSherlock当菜单中onPrepareOptionsMenu不会更新我可以改变onPrepareOptionsMenu 同一作品的菜单选项;它仍然被调用,但显示的菜单不会改变。

有没有人有解决这个问题?

是的,这是一个讨厌的ABS错误。 你能解决这个问题是这样的: 在FragmentActivity.java找到onPrepareOptionsMenu(android.view.Menu菜单)方法和注释掉或删除

if (mOptionsMenuInvalidated) { 

线及其相应的右括号,所以这一块得到执行,每次。 如果您正在使用FragmentMapActivity活动,请执行相同操作。

+10

也许你应该用类似这样的方式给开发者发邮件...... –

+0

这似乎在ABS中是固定的4.记得在你的onTabSelected()中调用invalidateOptionsMenu()来告诉系统启动onPrepareOptionsMenu() – larham1

+0

因为这个是一个比较老的问题,我会用@ larham1建议去,并假定它是固定的。 – Denis

此线程有点旧,我无法应用建议的修复(或找到更好的修复)。我正在使用ActionBarSherlock 4.2,但在ICS设备上登录选项菜单是叠加层时,仍然遇到问题:我无法弄清楚如何在登录活动关闭后强制使菜单失效(并且应用程序已经确定登录状态已更改)。

我解决了带有标志的问题,使菜单onResume失效。我觉得使用国旗是一种黑客行为,但它比每一份履历上的无效都好。

@Override 
protected void onResume() 
{ 
    if (checkLoginState == Boolean.TRUE) 
    { 
     invalidateOptionsMenu(); 
     checkLoginState = Boolean.FALSE; 
    } 
    super.onResume(); 
} 

然后在onOptionsItemSelected我设置的标志:

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    // Handle item selection 
    switch (item.getItemId()) 
    { 
     case R.id.actionbar_settings_signin_out: 
      if (isUserLoggedIn() == Boolean.TRUE) 
      { 
       logout(); 
       validateOptionsMenu(); 
      } 
      else 
      { 
       // set the flag so that on resume we update the options menu 
       checkLoginState = Boolean.TRUE; 
       startSignInActivity(); 
      } 
      return true; 

这是为我工作,但我很好奇听到的话,其他人有更好的方法解决它。

+0

这很有用,谢谢! – jasonhudgins