2012-07-26 22 views
1

我想在选择后将菜单项替换为另一个菜单项。我尝试了以下,但它不按预期工作。任何解决方案。谢谢。在Android中选择后更改菜单项

的menu.xml文件的文件是:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/add" android:visible="true" android:enabled="true" android:title="Add"></item> 
    <item android:id="@+id/delete" android:visible="false" android:enabled="true" android:title="Delete"></item> 
</menu> 

内MyActivity.java的代码是:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.defaultmenu, menu); 
     return true; 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 

     if(isAdded) { 
      menu.removeItem(R.id.add); 
      menu.add(0, R.id.delete, 0, "Delete"); 
     } else { 
      menu.removeItem(R.id.delete); 
      menu.add(0, R.id.add, 0, "Add"); 
     } 

     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 
      case R.id.add: 
       isLogin = true; 
       return true; 
      case R.id.delete: 
       isLogin = false; 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
+0

你能更具体的“它没有按预期工作”? – Kaediil 2012-07-26 13:17:35

+0

@Kaediil:“添加”菜单显示3次。 – user1182217 2012-07-27 04:36:28

回答

3

要刷新菜单调用invalidateOptionsMenu();
,我想在onPrepareOptionsMenu,你可以做...

if(isAdded) { 
     menu.findItem(R.id.add).setVisible(false); 
     menu.findItem(R.id.delete).setVisible(true); 
     return true; 
    } else { 
     menu.findItem(R.id.add).setVisible(true); 
     menu.findItem(R.id.delete).setVisible(false); 
     return true; 
    } 

    return super.onPrepareOptionsMenu(menu); 
+0

小心Android 3.0+菜单的细微差别,请参阅:http://developer.android.com/guide/topics/ui/menus.html寻找“处理点击事件”部分。 Android 3.0+需要invalidateOptionsMenu()才能刷新,我相信这会在3.0之前崩溃应用程序。 – nhunston 2012-07-26 13:44:11

+0

@Nunu:不,它不工作。当我在'onPrepareOptionsMenu'中写入'menu.clear();'时,它正在工作,但其他菜单选项也被清除。有任何想法吗。 – user1182217 2012-07-27 04:54:28

0

尝试像t他的

public static final int ADD_CATEGORY_INDEX = Menu.FIRST; 
public static final int DELETE_CATEGORY_INDEX= Menu.FIRST+1; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 

    menu.add(0, ADD_CATEGORY_INDEX, 0, "Add"); 
      menu.add(0, DELETE_CATEGORY_INDEX, 0, "delete"); 

    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case ADD_CATEGORY_INDEX:    
     break; 
    } 
      case DELETE_CATEGORY_INDEX:   
     break; 
    } 
    return true; 
} 
+0

它只显示2种菜单方式添加和删除。我希望一次只能显示一个。最初添加将与其他菜单选项一起显示。当用户点击“添加”菜单选项时,它将变为“删除”菜单选项。这是要求。 – user1182217 2012-07-27 04:58:20

0

我更改了onPrepareOptionsMenu,现在它工作正常。

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     //menu.clear(); 
     if(isadded) { 
      menu.removeItem(R.id.add); 
      menu.removeItem(R.id.delete); 
      menu.add(0, R.id.delete, 0, "Delete"); 
     } else { 
      menu.removeItem(R.id.add); 
      menu.removeItem(R.id.delete); 
      menu.add(0, R.id.add, 0, "Add"); 
     } 

     return super.onPrepareOptionsMenu(menu); 
    }