android中关于上下文菜单ContextMenu数据值的转递

转载出处:http://my.oschina.net/u/2263956/blog/339817


 在长按某view时,如该view有绑定OnCreateContextMenuListener,则会弹出ContextMenu上下文菜单,这类似于右键菜单,菜单弹出后点击某菜单项,则Activity或Fragment中的 public boolean onContextItemSelected(MenuItem item) 方法会响应菜单的点击,根据item的id来确定点击的是哪一个菜单项,从而进行进一步的操作。

      那么现在的问题是,有时候我们只知道了点击的哪个菜单项是不够的,还需要知道更多的信息,比如菜单项是点击的“删除”,要进行删除操作,那么必要要知道要进行删除的是哪个对象。

     
        解决方案:将数据存放在触发菜单view的tag中,同时在注册ContextMenuListener时(实际是添加menuItem时)将对应view绑定到menuItem上。这样在点击菜单项后,就可以通过menuItem来获取它的actionView从而进一步得到tag中的值。代码片断如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
  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);
     }
    });
?
1
2
3
4
5
6
7
8
9
10
   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);
     }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值