android中实现带图片和checkbox的listview

直接上代码:

  1. public class MyAdapter extends BaseAdapter {  
  2.     private LayoutInflater mInflater;  
  3.     private List<Map<String, Object>> mData;  
  4.     public static Map<Integer, Boolean> isSelected;  
  5.   
  6.     public MyAdapter(Context context) {  
  7.         mInflater = LayoutInflater.from(context);  
  8.         init();  
  9.     }  
  10.   
  11.     //初始化  
  12.     private void init() {  
  13.         mData=new ArrayList<Map<String, Object>>();  
  14.         for (int i = 0; i < 5; i++) {  
  15.             Map<String, Object> map = new HashMap<String, Object>();  
  16.             map.put("img", R.drawable.icon);  
  17.             map.put("title""第" + (i + 1) + "行的标题");  
  18.             mData.add(map);  
  19.         }  
  20.         //这儿定义isSelected这个map是记录每个listitem的状态,初始状态全部为false。  
  21.         isSelected = new HashMap<Integer, Boolean>();  
  22.         for (int i = 0; i < mData.size(); i++) {  
  23.             isSelected.put(i, false);  
  24.         }  
  25.     }  
  26.   
  27.     @Override  
  28.     public int getCount() {  
  29.         return mData.size();  
  30.     }  
  31.   
  32.     @Override  
  33.     public Object getItem(int position) {  
  34.         return null;  
  35.     }  
  36.   
  37.     @Override  
  38.     public long getItemId(int position) {  
  39.         return 0;  
  40.     }  
  41.   
  42.     @Override  
  43.     public View getView(int position, View convertView, ViewGroup parent) {  
  44.         ViewHolder holder = null;  
  45.         //convertView为null的时候初始化convertView。  
  46.         if (convertView == null) {  
  47.             holder = new ViewHolder();  
  48.             convertView = mInflater.inflate(R.layout.vlist, null);  
  49.             holder.img = (ImageView) convertView.findViewById(R.id.img);  
  50.             holder.title = (TextView) convertView.findViewById(R.id.title);  
  51.             holder.cBox = (CheckBox) convertView.findViewById(R.id.cb);  
  52.             convertView.setTag(holder);  
  53.         } else {  
  54.             holder = (ViewHolder) convertView.getTag();  
  55.         }  
  56.         holder.img.setBackgroundResource((Integer) mData.get(position).get(  
  57.                 "img"));  
  58.         holder.title.setText(mData.get(position).get("title").toString());  
  59.         holder.cBox.setChecked(isSelected.get(position));  
  60.         return convertView;  
  61.     }  
  62.   
  63.     public final class ViewHolder {  
  64.         public ImageView img;  
  65.         public TextView title;  
  66.         public CheckBox cBox;  
  67.     }  
  68. }  


public static Map<Integer, Boolean> isSelected; 

这个是关键,把所有的CheckBoxde的点击都放到Map里面。

要获取哪些项目被选择了,可以这样测试:

  1. OnClickListener bPop = new OnClickListener() {  
  2.         @Override  
  3.         public void onClick(View v) {  
  4.             for(int i=0;i<list.getCount();i++){  
  5.                 if(MyAdapter.isSelected.get(i)){  
  6.                     ViewHolder vHollder = (ViewHolder) list.getChildAt(i).getTag();  
  7. Log.i(TAG, "--onClick --"+vHollder.title.getText());  
  8.                 }  
  9.             }  
  10.         }  
  11.     };  
给checkbox添加OnClickListener才会优先响应list item里面的checkbox。checkbox的OnClickListener监听实现方法要写在getview方法里面,否则获取不到position。如果不需要对checkbox做优先响应,不需要给checkbox添加OnClickListener。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值