2016-01-29 53 views
0

我想用對象填充一個popup菜單,這樣當用戶點擊其中一個項目時,我可以驗證該項目是什麼並採取適當的操作。如何使用getMenu()添加對象到菜單add

我現在這樣做的方式,它填充列表,但只有字符串,我似乎無法引用它們所代表的對象。

下面的代碼(的onClick內)

case R.id.buttonInventory: 
        final PopupMenu popup = new PopupMenu(MainActivity.this, buttonInventory); 
        popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); 
        //add items to drop down list 
        for(Weapon weapon: player.getWeapons()){ 
         popup.getMenu().add(weapon.getName()); 
        } 
        popup.getMenu().add("Testing"); 

        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
         public boolean onMenuItemClick(MenuItem item) { 
          if(item.getClass().equals(Weapon.class)) { 
           Toast.makeText(
             MainActivity.this, 
             "You Clicked a weapon" + item.getTitle(), 
             Toast.LENGTH_SHORT 
           ).show(); 
          } 
          else { 
           Toast.makeText(
             MainActivity.this, 
             "You Clicked a non weapon", 
             Toast.LENGTH_SHORT 
           ).show(); 
          } 
          return true; 
         } 
        }); 

的問題是if語句。該程序不會將任何菜單項識別爲武器對象,因此跳過該武器並顯示吐司說「你點擊了非武器」。我該如何做到這一點,使菜單列表中的項目代表他們的名字來自的對象?

回答

0

嗨getName()返回什麼。在你的情況,你可以使用

popup.getMenu().add(weapon.getClass().toString()); 

和比較

item.getTitle().equals(Weapon.class) 

這取決於當你要添加的項,彈出菜單上,你只要寫

popupMenu.getMenu().add("Hello").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
+0

這並沒有改變任何東西。它仍然將一個字符串與武器類進行比較。如果可能的話,我需要知道如何將對象加載到菜單列表中。 –

+0

你檢查了更新的answere.Did它解決你的問題 –

0

當你正在做一個​​,你只是添加一個字符串的項目。所以,你的比較

if(item.getClass().equals(Weapon.class)) 

不適合作爲item.getClass總會返回MenuItem因爲其中的你上面的對比總是會失敗。

要做到這一點,你可以做到以下幾點:

int WEAPON_ID = 0; 

然後在彈出菜單

final PopupMenu popup = new PopupMenu(MainActivity.this, buttonInventory); 

popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); 

for(Weapon weapon: player.getWeapons()){ 
     popup.getMenu().add(WEAPON_ID,Menu.NONE,Menu.NONE,weapon.getName()); 
    } //this adds the weapons to the WEAPON_ID group 

在檢查的初始化階段,您可以檢查組ID

popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
      public boolean onMenuItemClick(MenuItem item) { 
       if(item.getGroupId() == WEAPON_ID) { 
        Toast.makeText(
          MainActivity.this, 
          "You Clicked a weapon" + item.getTitle(), 
          Toast.LENGTH_SHORT 
        ).show(); 
       } 
       else { 
        Toast.makeText(
          MainActivity.this, 
          "You Clicked a non weapon", 
          Toast.LENGTH_SHORT 
        ).show(); 
       } 
       return true; 
      } 
     }); 

要如果您想確定這些關聯的對象,那麼您可以指定itemID a ttribute作爲

popup.getMenu().add(WEAPON_ID,weapon.getID(),Menu.NONE,weapon.getName()); 

,你可以得到相同的菜單項爲item.getItemId()

+0

請讓我知道這是否解決了你的問題。樂於幫助。 –

相關問題