android ExpandableListView 為Group與Child添加菜單

來源:互聯網
上載者:User

為ExpandableListVIew的Group與Child添加不同菜單有兩種方式:

1、通過ShowDialog

這種方式是通過適配器為VIew添加Tag然後在ExpandableListView的OnItemLongClickListener擷取View的Tag來判斷是Group或Child,然後彈出不同的菜單對話方塊。

代碼如下:

  1. @Override  
  2.     public View getChildView(final int arg0, final int arg1, boolean arg2, View view,  
  3.             ViewGroup arg4) {  
  4.         if(view==null){  
  5.             view = inflater.inflate(R.layout.team_layout_main_list_item, null);  
  6.         }  
  7.         TextView textView = (TextView) view.findViewById(R.id.team_main_list_username);  
  8.         ImageView imageView = (ImageView) view.findViewById(R.id.team_main_list_head);  
  9.         imageView.setImageResource(PrortaitUtils.conversionIdToRes(((UserInfo)getChild(arg0, arg1)).getPortrait()));  
  10.         view.setTag(R.id.team_singlechat_id_send, arg0);  
  11.         view.setTag(R.id.team_singlechat_id_close, arg1);       //備忘1  
  12.         textView.setText(((UserInfo)getChild(arg0, arg1)).getUsername());  
  13.         textView.setTextColor(Color.BLACK);  
  14.         view.setBackgroundColor(Color.rgb(247, 243, 247));  
  15.         view.setBackgroundResource(R.drawable.team_item_bg_selector);  
  16.         return view;  
  17.     }  

 

  1. @Override  
  2.     public View getGroupView(int arg0, boolean arg1, View groupView, ViewGroup arg3) {  
  3.         if(groupView == null){  
  4.             groupView = inflater.inflate(R.layout.team_layout_main_list_group, null);  
  5.         }  
  6.         TextView groupTextView = (TextView) groupView.findViewById(R.id.team_main_list_teamname);  
  7.         ImageView groupImageView = (ImageView) groupView.findViewById(R.id.team_main_list_into);  
  8.         groupImageView.setImageResource(R.drawable.team_into1);  
  9.         if(arg1){  
  10.             groupImageView.setImageResource(R.drawable.team_into2);  
  11.         }  
  12.         groupView.setTag(R.id.team_singlechat_id_send, arg0);  
  13.         groupView.setTag(R.id.team_singlechat_id_close, -1);        //備忘2  
  14.         groupTextView.setText(getGroup(arg0).toString());  
  15.         groupTextView.setTextColor(Color.BLACK);  
  16.         return groupView;  
  17.     }  

 

  1. //長按條目,包括group和child  
  2.     onLineList.setOnItemLongClickListener(new OnItemLongClickListener() {  
  3.   
  4.         @Override  
  5.         public boolean onItemLongClick(AdapterView<?> arg0, final View arg1,  
  6.                 int arg2, long arg3) {  
  7.             longClickListIteam(arg1);  
  8.             return true;  
  9.         }  
  10.     });  
  11.      /** 
  12.       * 長按list中的某一個條目 
  13.       */  
  14.      private void longClickListIteam(final View arg1) {  
  15.             final int groupPos = (Integer)arg1.getTag(R.id.team_singlechat_id_send);      
  16.             final int childPos = (Integer)arg1.getTag(R.id.team_singlechat_id_close);  
  17.             Log.i(TAG,"groupPos:"+groupPos+",childPos:"+childPos);  
  18.             if(childPos == -1){         //如果得到child位置的值為-1,則是操作group  
  19.                 Log.i(TAG,"操作group組件");  
  20.                 updateTeam(arg1);  
  21.             }else{  
  22.                 Log.i(TAG,"操作child組件");     //否則,操作child  
  23.                 final List<UserInfo> users = getTeamUser(groupPos);  
  24.                 //判斷長按的是否為自己,如果是不是自己,則快顯視窗操作,如果是自己,則查看資料  
  25.                 if(DicqConstant.DEFAULTMAC.equalsIgnoreCase(users.get(childPos).getUsermac())){  
  26.                     Intent it = new Intent(TeamMainActivity.this,UserInfoActivity.class);  
  27.                     it.putExtra("isMyself", true);  
  28.                     TeamMainActivity.this.startActivity(it);  
  29.                 }else{  
  30.                     builder = new AlertDialog.Builder(TeamMainActivity.this);  
  31.                     builder.setTitle("操作使用者");  
  32.                     builder.setItems(new String[]{"查看資料","查看共用","移至分組","使用權限設定"}, new DialogInterface.OnClickListener() {  
  33.                         public void onClick(DialogInterface dialog, int which) {  
  34.                             if(which == 0){  
  35.                                 Intent it = new Intent(TeamMainActivity.this,UserInfoActivity.class);  
  36.                                 it.putExtra("isMyself", false);  
  37.                                 it.putExtra("userinfo", users.get(childPos));  
  38.                                 TeamMainActivity.this.startActivity(it);  
  39.                             }else if(which == 1){  
  40.                                 Intent it1 = new Intent(TeamMainActivity.this,FileShareActivity.class);  
  41.                                 it1.putExtra("userinfo",users.get(childPos));  
  42.                                 TeamMainActivity.this.startActivity(it1);  
  43.                             }else if(which == 2){  
  44.                                 updateChild(groupPos,childPos);  
  45.                             }else if(which == 3){  
  46.                                 updateUserPrivilege(groupPos,childPos);  
  47.                             }  
  48.                         }  
  49.                     }).show();  
  50.                 }  
  51.   
  52.             }  
  53.         }  

第二種方式、是能ContextMenu。

這種方式是通過把ExpandableListContextMenuInfo的Type來判斷是Group或Child,然後建立不同的菜單

代碼如下:

  1. @Override
  2.     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
  3.             ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
  4.             int type = ExpandableListView.getPackedPositionType(info.packedPosition); 
  5.             int group = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
  6.             if(type == ExpandableListView.PACKED_POSITION_TYPE_CHILD && group!=0){
  7.                     menu.setHeaderTitle("Sample menu");
  8.                     menu.add(0, 0, 0, R.string.expandable_list_sample_action);
  9.             }
  10.     }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.