我的应用程序在启动时调用Web服务以查看用户是否已登录。如果他们已登录,则需要显示注销图标。如果他们没有登录,则需要显示登录图标。如果他们的应用程序版本不支持登录,则需要继续显示没有图标。
如何在Web服务返回时显示图标?我不能调用invalidateOptionsMenu()因为我使用的是2.3。此外,如果我尝试在onPrepareOptionsMenu()中添加它,当您按下菜单按钮而不是ActionBar时,它会显示在菜单上。
答案 0 :(得分: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;
}
然后,当您发现用户已登录时,请将登录项的可见性设置为false,如下所示:
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>
答案 1 :(得分:0)
我使用此代码将菜单项添加到ActionBar:
/*************************************/
/* 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语句并根据
更改图标