android开发--listview中checkbox的选中状态

来源:互联网 发布:php 返回html 编辑:程序博客网 时间:2024/05/02 01:12

看了一篇这个文章补充一下

现象:listview 中,如果有10项,其中手机屏幕显示1-6项,其余的7-10项在屏幕中不可见,得向下滚动后才能看到,这个时候,如果选中1、2项,再滚动到7-10项,之后再滚动回来1-6项,就发现1、2项并未被选中。

解决方法: 编写自定义的Adapter

 

public class TestAdapter extends ArrayAdapter<String> {    private int resource;    private LayoutInflater inflater;    private boolean[] checks; //用于保存checkBox的选择状态    public TestAdapter(Context context, int resource, List<String> list) {        super(context, resource, list);        checks = new boolean[list.size()];        this.resource = resource;        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    } 
 
//下面参数中的position前面直接加个final就可以了    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if(convertView == null){            convertView = inflater.inflate(resource, null);            holder = new ViewHolder();            holder.title = (TextView) convertView.findViewById(R.id.title);            holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);            convertView.setTag(holder);        }else {            holder = (ViewHolder) convertView.getTag();        }        holder.title.setText(getItem(position));
//如果你的adapter中是个对象
//final Object mObj = getItem(postion);
        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){            @Override            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {                checks[position] = isChecked;
//在这里改变你对象的标记
//mObj.setBoolean(isChecked);
            }});        holder.checkBox.setChecked(checks[position]);        return convertView;    }    static class ViewHolder {        TextView title;        CheckBox checkBox;    }}


0 0