我的应用程序在启动时调用 Web 服务以查看用户是否已登录。如果他们已登录,则需要显示注销图标。如果他们没有登录,它需要显示一个登录图标。如果他们的应用程序版本不支持登录,则需要继续不显示图标。
如何让图标在 Web 服务返回时显示?我无法调用 invalidateOptionsMenu() 因为我使用的是 2.3。此外,如果我尝试将它添加到 onPrepareOptionsMenu() 中,当您按下菜单按钮而不是 ActionBar 时,它会显示在菜单上。
我的应用程序在启动时调用 Web 服务以查看用户是否已登录。如果他们已登录,则需要显示注销图标。如果他们没有登录,它需要显示一个登录图标。如果他们的应用程序版本不支持登录,则需要继续不显示图标。
如何让图标在 Web 服务返回时显示?我无法调用 invalidateOptionsMenu() 因为我使用的是 2.3。此外,如果我尝试将它添加到 onPrepareOptionsMenu() 中,当您按下菜单按钮而不是 ActionBar 时,它会显示在菜单上。
我用这种方式做了类似的事情:
在您的操作栏菜单中,已经存在登录和注销项目(我建议将它们放在 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>
我使用此代码将菜单项添加到 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 语句并相应地更改图标