1. Code

1) adapter class

import java.util.ArrayList;    
import java.util.HashMap;    
import java.util.List;    
import java.util.Map;    
    
import android.content.Context;    
import android.view.LayoutInflater;    
import android.view.View;    
import android.view.ViewGroup;    
import android.widget.BaseAdapter;    
import android.widget.CheckBox;    
import android.widget.ImageView;    
import android.widget.TextView;    
    
public class CheckBoxAdapter extends BaseAdapter {    
    private LayoutInflater mInflater;    
    private List> mData;    
    public static Map isSelected;    
    
    public MyAdapter(Context context) {    
        mInflater = LayoutInflater.from(context);    
        init();    
    }    
    
    //初始化    
    private void init() {    
        mData=new ArrayList>();    
        for (int i = 0; i < 5; i++) {    
            Map map = new HashMap();    
            map.put("img", R.drawable.icon);    
            map.put("title", "第" + (i + 1) + "行的标题");    
            mData.add(map);    
        }    
        //这儿定义isSelected这个map是记录每个listitem的状态,初始状态全部为false。    
        isSelected = new HashMap();    
        for (int i = 0; i < mData.size(); i++) {    
            isSelected.put(i, false);    
        }    
    }    
    
    @Override    
    public int getCount() {    
        return mData.size();    
    }    
    
    @Override    
    public Object getItem(int position) {    
        return null;    
    }    
    
    @Override    
    public long getItemId(int position) {    
        return 0;    
    }    
    
    @Override    
    public View getView(int position, View convertView, ViewGroup parent) {    
        ViewHolder holder = null;    
        //convertView为null的时候初始化convertView。    
        if (convertView == null) {    
            holder = new ViewHolder();    
            convertView = mInflater.inflate(R.layout.vlist, null);    
            holder.img = (ImageView) convertView.findViewById(R.id.img);    
            holder.title = (TextView) convertView.findViewById(R.id.title);    
            holder.cBox = (CheckBox) convertView.findViewById(R.id.cb);    
            convertView.setTag(holder);    
        } else {    
            holder = (ViewHolder) convertView.getTag();    
        }    
        holder.img.setBackgroundResource((Integer) mData.get(position).get(    
                "img"));    
        holder.title.setText(mData.get(position).get("title").toString());    
        holder.cBox.setChecked(isSelected.get(position));    
        return convertView;    
    }    
    
    public final class ViewHolder {    
        public ImageView img;    
        public TextView title;    
        public CheckBox cBox;    
    }    
}  

 2) xml布局

<?xml version="1.0" encoding="utf-8"?>    
    android:orientation="horizontal"    
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent"    
    >    
            android:id="@+id/img"    
        android:layout_width="wrap_content"    
        android:layout_height="wrap_content"    
        android:layout_gravity="center_vertical"/>    
            android:id="@+id/title"    
        android:textSize="18dip"    
        android:layout_weight="1"    
        android:layout_width="wrap_content"    
        android:layout_height="wrap_content"/>    
            android:id="@+id/cb"    
        android:layout_width="wrap_content"    
        android:layout_height="wrap_content"    
        android:focusable="false"    
        android:focusableInTouchMode="false"    
        android:clickable="false"           
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"/>    

 

由于checkbox的点击事件优先级比listview的高,所以要在checkbox中添加android:focusable="false",使得checkbox初始的时候没有获取焦点。

2. Call

1) set value

    list=(ListView)findViewById(R.id.lv);    
            MyAdapter adapter=new MyAdapter(this);    
            list.setAdapter(adapter);    
            list.setItemsCanFocus(false);    
            list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);    
        
            list.setOnItemClickListener(new OnItemClickListener(){    
                @Override    
                public void onItemClick(AdapterView<?> parent, View view,    
                        int position, long id) {    
                    ViewHolder vHollder = (ViewHolder) view.getTag();    
    //在每次获取点击的item时将对于的checkbox状态改变,同时修改map的值。    
                    vHollder.cBox.toggle();    
                    MyAdapter.isSelected.put(position, vHollder.cBox.isChecked());    
                }    
            });

2) get value

OnClickListener bPop = new OnClickListener() {    
        @Override    
        public void onClick(View v) {    
            for(int i=0;i                if(MyAdapter.isSelected.get(i)){    
                    ViewHolder vHollder = (ViewHolder) list.getChildAt(i).getTag();    
Log.i(TAG, "--onClick --"+vHollder.title.getText());    
                }    
            }    
        }    
    };  

转载于:https://www.cnblogs.com/tyler2000/archive/2012/04/18/android_listview_checkBox.html

更多相关文章

  1. android反射获取资源
  2. android图片异步加载到本地
  3. Android挂断和接听电话
  4. Android(安卓)获取本地图片
  5. 实用正则表达式扫描android SDcard的文件
  6. android获取手机通讯录
  7. Android中常用工具类
  8. Android(安卓)监听手机锁屏
  9. 获取sd卡容量

随机推荐

  1. Android(安卓)实现视屏播放器、边播边缓
  2. Android(安卓)微信支付快速集成案例及有
  3. 电脑通过豌豆荚连接手机或者平板不成功,豌
  4. 【设计模式与Android】抽象工厂模式——
  5. Android(安卓)Drawable / DrawableCompat
  6. 一个简短的android病毒分析
  7. 【Kris专题】android Style 小结---kris
  8. Android中如何提高UI的性能
  9. Android实现加载网页,获取网页上图以及点
  10. web app和本地app之争 及其 iOS和Android