动态决定菜单的动作

时间:2011-06-29 12:58:32

标签: android

我在应用程序中动态添加菜单,具体取决于我从onPrepareOptionsMenu(菜单菜单)后端获得的值。现在我想要决定动态添加的菜单要执行的操作(因为我不知道事先要执行的操作),具体取决于与后端菜单关联的某些值。我如何实现这一目标。请提供一些关于此的想法。提前谢谢。

4 个答案:

答案 0 :(得分:3)

查看onCreateOptionsMenuonPrepareOptionsMenu。基本上你需要在Activity覆盖它们并在那里处理菜单。您可以在这些被覆盖的方法中删除或添加菜单。

整个程序都有详细记录,described here

答案 1 :(得分:0)

如果您指的是选项菜单,则本指南应该可以帮助您:Changing the Menu

它显示了如何在使用onPrepareOptionsMenu()方法向用户显示菜单之前,通过菜单动态添加和删除菜单中的项目。然后,您可以在菜单中添加或删除项目。

答案 2 :(得分:0)

您必须使用onPrepareOptionsMenuonCreateOptionsMenu。这是好example如何做到这一点。

答案 3 :(得分:0)

我找到了实现我想要的方法。我将与菜单关联的值作为MenuItems intent的一部分。在onOptionsItemSelected(MenuItem项)中,我从MenuItem获取意图,从中检索值并执行所需的操作。代码如下:

 @Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    ApplicationManager.getInstance().resetCounter();
    menu.removeGroup(1);
    Vector listOfMenuToBeAdded=Service.getInstance().getMenuList();
    Enumeration<com.data.Menu> menuEnumeration = listOfMenuToBeAdded.elements();
    while (menuEnumeration.hasMoreElements()) {
        com.data.Menu levelOptions = (com.pravaa.mobile.dashboard.data.Menu) menuEnumeration
                .nextElement();
        MenuItem levelMenuItem = menu.add(1, 100, Menu.NONE,
                levelOptions.getCaption());
        LevelOptionIntent levelOptionIntent = new LevelOptionIntent();
        levelOptionIntent.setAppCode(levelOptions.getAppCode());
        levelOptionIntent.setDashboardNumber(levelOptions.getNumber());
        levelOptionIntent.setUniqueRecordId(levelOptions
                    .getUniqueRecordId());
        levelOptionIntent.setLevelNumber(levelOptions.getLevelNo());    
        levelMenuItem.setIntent(levelOptionIntent);
    }
    return true;
}

单击菜单项后,根据意图中设置的值执行操作。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case 100:
        LevelOptionIntent levelOptionIntent = (LevelOptionIntent) item
                .getIntent();
        //Perform what you would want to based on the values set in the intent.
        if (levelOptionIntent.getAppCode().equals(A)) {
        // Start activity A
        }elseif (levelOptionIntent.getAppCode().equals(B)) {
        // Start activity B
        }else if (levelOptionIntent.getAppCode().equals(C)) {
        // Start activity C
        }

        break;
    }
    return true;
}

LevelOptionsIntent类如下:

public class LevelOptionIntent extends Intent {
private int dashboardNumber;
private String appCode;
private String uniqueRecordId;
private int levelNumber;

public LevelOptionIntent() {
    super();
    // TODO Auto-generated constructor stub
}
public int getDashboardNumber() {
    return dashboardNumber;
}
public void setDashboardNumber(int dashboardNumber) {
    this.dashboardNumber = dashboardNumber;
}
public String getAppCode() {
    return appCode;
}
public void setAppCode(String appCode) {
    this.appCode = appCode;
}
public String getUniqueRecordId() {
    return uniqueRecordId;
}
public void setUniqueRecordId(String uniqueRecordId) {
    this.uniqueRecordId = uniqueRecordId;
}
public int getLevelNumber() {
    return levelNumber;
}
public void setLevelNumber(int levelNumber) {
    this.levelNumber = levelNumber;
}}

我不确定这是否是正确的做法。可以有人对此有所了解。

提前致谢。