我在应用程序中动态添加菜单,具体取决于我从onPrepareOptionsMenu(菜单菜单)后端获得的值。现在我想要决定动态添加的菜单要执行的操作(因为我不知道事先要执行的操作),具体取决于与后端菜单关联的某些值。我如何实现这一目标。请提供一些关于此的想法。提前谢谢。
答案 0 :(得分:3)
查看onCreateOptionsMenu
和onPrepareOptionsMenu
。基本上你需要在Activity
覆盖它们并在那里处理菜单。您可以在这些被覆盖的方法中删除或添加菜单。
整个程序都有详细记录,described here
答案 1 :(得分:0)
如果您指的是选项菜单,则本指南应该可以帮助您:Changing the Menu。
它显示了如何在使用onPrepareOptionsMenu()方法向用户显示菜单之前,通过菜单动态添加和删除菜单中的项目。然后,您可以在菜单中添加或删除项目。
答案 2 :(得分:0)
您必须使用onPrepareOptionsMenu和onCreateOptionsMenu。这是好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;
}}
我不确定这是否是正确的做法。可以有人对此有所了解。
提前致谢。