无法在ActionBar上更改图标

时间:2012-03-26 19:30:25

标签: android android-actionbar android-menu android-support-library

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

如何在Web服务返回时显示图标?我不能调用invalidateOptionsMenu()因为我使用的是2.3。此外,如果我尝试在onPrepareOptionsMenu()中添加它,当您按下菜单按钮而不是ActionBar时,它会显示在菜单上。

2 个答案:

答案 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语句并根据

更改图标