2012-07-26 55 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); 
    }