1

我的应用程序在启动时调用Web服务以查看用户是否已登录。如果他们已登录,则需要显示注销图标。如果他们没有登录,它需要显示一个登录图标。如果他们的应用程序版本不支持登录,则需要继续显示无图标。更改操作栏上的图标

如何在网络服务返回时显示图标?我无法调用invalidateOptionsMenu(),因为我使用的是2.3。另外,如果我尝试将它添加到onPrepareOptionsMenu()中,则在按下菜单按钮而不是在ActionBar上时,它会显示在菜单上。

回答

0

我使用此代码添加菜单项的动作条:

/*************************************/ 
/* Create the actionbar options menu */ 
/*************************************/ 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    menu.add("Settings") 
      .setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_light) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    return true; 
} 

你应该能够if语句中有添加和更改图标accordingley

+0

的形式显示,而被称为Web服务,以便onCreateOptionsMenu()已经被调用。我需要能够在应用程序生命周期的任何时候更改图标 – 2012-03-26 19:47:12

+0

好的。我误解了。您是否使用ActionBar的兼容性库?如果是的话,我认为invalidateOptionsMenu()可用,如果你扩展FragmentActivity – Tony 2012-03-26 20:07:29

+0

我正在扩展FragmentActivity。当我调用invalidateOptionsMenu()时,我得到一个NoSuchMethodError – 2012-03-26 20:13:47

1

我已经做了类似这样的东西方式:

在你的操作栏菜单中,同时登录和注销项目已经存在(我建议将它们放在一个xml中,而不是在代码中创建它,以便您可以轻松地为项目分配一个id)。然后,只需在创建菜单时参考您的菜单,以便稍后进行修改。

Menu myActionBarMenu; 

/** 
* Creates action bar items. 
*/ 
@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menuNameHere, menu); 
    myActionBarMenu = menu; 
} 

然后,当你发现用户登录,设置日志的能见度项目为假像这样:

myActionBarMenu.findItem(R.id.logInAction).setVisible(false); 
myActionBarMenu.findItem(R.id.logOutAction).setVisible(true); 

扭转在用户注销的情况下的可见度。

这将是你的XML菜单会是什么样子:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/logInAction" 
     android:showAsAction="ifRoom" 
     android:title="Log In"/> 
    <item 
     android:id="@+id/logOutAction" 
     android:showAsAction="ifRoom" 
     android:title="Log Out"/> 
</menu> 
+0

使用myActionBarMenu.findItem(R.id.logInAction).setVisible(false)时出现错误; - >自findItem返回MenuItem并且没有setVisible方法! – user387184 2012-04-21 20:27:12

+0

我不确定你的意思。请参阅android.view.MenuItem的文档(developer.android.com/reference/android/view/MenuItem.html#setVisible(boolean))。 setVisible是android.view.MenuItem上的一个方法。我在我的项目中使用了ActionBarSherlock,并且它也是相应MenuItem中的一个方法。 – Spencer 2012-04-23 14:04:42