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; } };