SimpleAdapter+ListView实现复选按钮效果

1、ListView上放置了复选按钮或者按钮后,因为单击事件的冲突会导致ListView的OnItemClick(单击事件)失灵。解决办法是将复选按钮或者按钮的android:focusable属性设置为false

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/ck_choice"
    android:layout_gravity="center_vertical"
    android:focusable="false"
    />

2、如果要实现ListView上复选按钮的单击事件,必须重写SimpleAdapter的getView方法

//参数1:适配器所处的上下文对象,用this表示当前Activity
//参数2:为该适配器提供数据的数据源对象,是List对象,该List对象中必须存放Map对象
//参数3:是ListView中一个View的布局文件
//参数4:是List中存放的Map对象的key值的集合
//参数5:一个View的布局文件中的控件的id的集合
SimpleAdapter simpleAdapter=new SimpleAdapter(
        this,
        datas,
        R.layout.item_drink,
        new String[]{"check","img","name","price"},
        new int[]{R.id.ck_choice,R.id.iv_drink,R.id.tv_dname,R.id.tv_price}){
     //重写getView方法
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //获得当前的View,即获得焦点的ItemView
        View v= super.getView(position, convertView, parent);
        //获得View上的CheckBox控件
        CheckBox ckdrink=v.findViewById(R.id.ck_choice);
        final TextView tvdname=v.findViewById(R.id.tv_dname);
        final String dname=tvdname.getText().toString();
        //为CheckBox控件绑定监听
        ckdrink.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                {
                    stringBuffer.append(dname);
                    Log.i("tag",stringBuffer.toString());
                }
                else
                {
                    int start=stringBuffer.indexOf(dname);
                    Log.i("tag","start"+start);
                    stringBuffer.replace(start,start+dname.length(),"");
                }
            }
        });
        return v;
    }
};

SimpleAdapter+ListView实现复选按钮效果