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);
    }
相关文章
相关标签/搜索