android,關於上下文菜單ContextMenu數據值的轉遞

      在長按某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);
    }
相關文章
相關標籤/搜索