使用ActionBarSherlock时,选项菜单不会动态更新
我需要: 使用“登录”选项创建选项菜单,当用户登录时需要更改为“注销”,当用户再次点击菜单按钮时使用ActionBarSherlock时,选项菜单不会动态更新
当使用纯SDK使用兼容性库V4 然而,当使用ActionBarSherlock当菜单中onPrepareOptionsMenu不会更新我可以改变onPrepareOptionsMenu 同一作品的菜单选项;它仍然被调用,但显示的菜单不会改变。
有没有人有解决这个问题?
是的,这是一个讨厌的ABS错误。 你能解决这个问题是这样的: 在FragmentActivity.java找到onPrepareOptionsMenu(android.view.Menu菜单)方法和注释掉或删除
if (mOptionsMenuInvalidated) {
线及其相应的右括号,所以这一块得到执行,每次。 如果您正在使用FragmentMapActivity活动,请执行相同操作。
此线程有点旧,我无法应用建议的修复(或找到更好的修复)。我正在使用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;
这是为我工作,但我很好奇听到的话,其他人有更好的方法解决它。
这很有用,谢谢! – jasonhudgins
也许你应该用类似这样的方式给开发者发邮件...... –
这似乎在ABS中是固定的4.记得在你的onTabSelected()中调用invalidateOptionsMenu()来告诉系统启动onPrepareOptionsMenu() – larham1
因为这个是一个比较老的问题,我会用@ larham1建议去,并假定它是固定的。 – Denis