为什么Android Action菜单项不会更新

时间:2014-05-10 15:43:56

标签: android

我为消息创建了一个操作栏项,当收到新消息时,应该更新它。问题是,当我刷新活动时,它有时会将图标显示为新消息,有时它显示为没有新消息。它是随机发生的。它没有正确更新。我查看了How to update a menu item shown in the ActionBar?

但无法解决我的问题。我意识到问题是onCreateOptionMenu在oncreate时执行。我怎么能推迟呢?

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.loggedmenu, menu);


    int no;

    try {
        no = Integer.parseInt(noOfmsgs);
    } catch (NumberFormatException e) {
        no = 0;
    }

    if (no > 0) {
        menu.findItem(R.id.messages)
                .setIcon(R.drawable.ic_action_new_email);
    } else {
        menu.findItem(R.id.messages).setIcon(R.drawable.ic_action_email);
    }

    return true;
}

1 个答案:

答案 0 :(得分:1)

正如您所说,onCreateOptionsMenuActivity被创建后被调用,而且至少是您调用invalidateOptionsMenu()来再次获得此方法。但是,您可以在活动中使用全局变量来更新项目,如下所示:

// global var menu
private Menu mMenu;

// onCreate, onResume, etc.

// Init the var
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     this.mMenu = menu;
     getMenuInflater().inflate(R.menu.loggedmenu, menu);
     return true;
}  

然后,在执行AsyncTaskThread或您执行的更新noOfmsgs值后,请调用此方法:

// update the items
private void updateMenuItems() {
    int no;
    try {
        no = Integer.parseInt(noOfmsgs);
    } catch (NumberFormatException e) {
        no = 0;
    }
    if (no > 0) {
        mMenu.findItem(R.id.messages).setIcon(R.drawable.ic_action_new_email);
    } else {
        mMenu.findItem(R.id.messages).setIcon(R.drawable.ic_action_email);
    }
}