2015-11-07 71 views
0

我目前正在編寫一個簡單的應用程序,該應用程序使用2個與彈出菜單錨定的按鈕,該按鈕將在按下按鈕時顯示。這很簡單,但是我在使用onMenuItemClick()方法時遇到了麻煩,我想用它將該按鈕的文本更改爲單擊的菜單項。由於我有兩個彈出式菜單,每個都有3個項目,這是否意味着我將不得不在onMenuItemClick()中編寫6個不同的if語句,每個嘗試檢測哪個菜單項被點擊?還是有更簡單的方法來做到這一點,例如指定2 onMenuItemClick()方法,每個方法鏈接到單獨的2菜單?Android onMenuItemClick() - 檢測點擊了哪個菜單?

public class MainActivity extends AppCompatActivity implements OnMenuItemClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void showColourPopUpMenu(View v){ 
     PopupMenu coloursPopUpMenu = new PopupMenu(this, v); 
     coloursPopUpMenu.setOnMenuItemClickListener(this); 
     coloursPopUpMenu.inflate(R.menu.colours_menu); 
     coloursPopUpMenu.show(); 
    } 

    public void showShapePopUpMenu(View v){ 
     PopupMenu shapesPopUpMenu = new PopupMenu(this, v); 
     shapesPopUpMenu.setOnMenuItemClickListener(this); 
     shapesPopUpMenu.inflate(R.menu.shape_menu); 
     shapesPopUpMenu.show(); 
    } 

    @Override 
    public boolean onMenuItemClick(MenuItem item) { 
     //How to determine which menu clicked? 
     return false; 
    } 
} 
+0

你可以去switch語句...請參考答案 –

回答

1

這是不可能直接。您至少需要將項目ID item.getItemId()映射到它們所連接的菜單(按鈕)。

也許有點簡單可能會使用羣體喜歡:菜單/ colours_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <group android:id="@+id/colours_menu" > 
     <item android:id="@+id/item1" ... /> 
     <item android:id="@+id/item2" ... /> 
     <item android:id="@+id/item3" ... /> 
    </group> 
</menu> 

隨着item.getGroupId()你會得到羣ID,只需要將它們映射到按鍵:

@Override 
public boolean onMenuItemClick(MenuItem item) { 
    if (item.getGroupId() == R.id.colours_menu) { 
     // edit colors menu 
    } else { 
     // edit shape menu 
    } 
} 
+0

完美的作品,謝謝 – user3650602

1
@Override 
public boolean onMenuItemClick(MenuItem item) { 
    int id = item.getItemId() 
    switch(id) { 
    case R.id.item1: 
      return true; 
    case R.id.item2: 
      return true; 
    default: 
      return false; 
    } 
} 
0

創建偵聽器時進行分配。

popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
    @Override 
    public boolean onMenuItemClick(MenuItem item) { 
     return true; 
    } 
});