在長按某view時,如該view有綁定OnCreateContextMenuListener,則會彈出ContextMenu上下文菜單,這相似於右鍵菜單,菜單彈出後點擊某菜單項,則Activity或Fragment中的 public boolean onContextItemSelected(MenuItem item) 方法會響應菜單的點擊,根據item的id來肯定點擊的是哪個菜單項,從而進行進一步的操做。java
那麼如今的問題是,有時候咱們只知道了點擊的哪一個菜單項是不夠的,還須要知道更多的信息,好比菜單項是點擊的「刪除」,要進行刪除操做,那麼必要要知道要進行刪除的是哪一個對象。ide
解決方案:將數據存放在觸發菜單view的tag中,同時在註冊ContextMenuListener時(實際是添加menuItem時)將對應view綁定到menuItem上。這樣在點擊菜單項後,就能夠經過menuItem來獲取它的actionView從而進一步獲得tag中的值。代碼片段以下:ui
view.setTag(msg.getId()); view.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { //給對話ITEM綁定上下文菜單 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.setHeaderTitle(R.string.title_context_menu_operate); menu.add(0, CommonContents.ID_CONTEXT_MENUITEM_DELETE, 0, R.string.context_menuitem_delete).setActionView(v); menu.add(0, CommonContents.ID_CONTEXT_MENUITEM_DELETE, 1, R.string.context_menuitem_copy).setActionView(v); } });
public boolean onContextItemSelected(MenuItem item) { long id = (Long) item.getActionView().getTag(); switch(item.getItemId()){ case 1: Toast.makeText(this, item.getTitle()+String.valueOf(id), Toast.LENGTH_SHORT).show(); case 2: Toast.makeText(this, item.getTitle()+String.valueOf(id), Toast.LENGTH_SHORT).show(); } return super.onContextItemSelected(item); }