ListView CheckBox 全选,单选

来源:互联网 发布:营销软件广告 编辑:程序博客网 时间:2024/05/14 11:26

ListView CheckBox 全选,单选

最近做商城项目,在购物车模块有用到listView 和checkBox单选全选,所以在这里记录一下,和大家共勉。如果有不对的地方请多多指教 ,多多包含。话不多说上代码。

activity代码
/**
* @类说明 listView checkBox的单选 全选删除 适用于商城购物车模块
*
*/

public class SelectCheckBoxActivity extends Activity implements OnClickListener {    // 编辑按钮    private TextView txt_edit;    // 删除按钮    private TextView txt_delete;    // 全选按钮    private CheckBox select_all_check;    private ListView mlistView;    // 数据源    static String str[] = { "data1", "data2", "data3", "data4",         "data5",data6", "data7", "data8", "data9", "data10",          "data11",  "data12","data13" };    private List<Map> list;    //适配器    private SelectBoxAdapter mAdapter;    // 存储选中的checkBox数量    List<Map> checkList = new ArrayList<Map>();    /**     * 状态 : 是否编辑     */    private boolean isEdit = false;    private LinearLayout delete_all_linear;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_select_check_box);        initView();        initdata();        mAdapter = new SelectBoxAdapter(this, list);        mlistView.setAdapter(mAdapter);    }    private void initView() {        mlistView = (ListView) findViewById(R.id.listView);        txt_edit = (TextView) findViewById(R.id.txt_edit);        txt_delete = (TextView) findViewById(R.id.txt_delete);        select_all_check = (CheckBox) findViewById(R.id.check_selectall);        delete_all_linear = (LinearLayout) findViewById(R.id.delete_all_linear);        txt_edit.setOnClickListener(this);        select_all_check.setOnClickListener(this);        txt_delete.setOnClickListener(this);        mlistView.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View arg1,                    int position, long arg3) {                Map<String, String> item = list.get(position);                if (mAdapter.getEditState()) {                    // 不是编辑状态 可点击item 处理item的点击事件                    return;                } else {                    // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤                    ViewHolder holder = (ViewHolder) arg1.getTag();                    holder.check_select.setFocusable(true);                    // 改变CheckBox的状态                    holder.check_select.toggle();                    if (holder.check_select.isChecked()) {                        /**                         * 如果check_select == true 当前item 置为 true checkList里面                         * 没有与当前选中的item相同的 就把当前选中item添加到checkList                         */                        item.put("flag", "true");                        if (!checkList.contains(item)) {                            checkList.add(item);                        }                    } else {                        /**                         * 如果check_select == false 当前item 置为 FALSE                         * 并且从checklist里面删除                         */                        item.put("flag", "false");                        checkList.remove(item);                    }                    // 根据选中的数量来控制全选按钮的状态                    if (checkList.size() == list.size()) {                        select_all_check.setChecked(true);                    } else {                        select_all_check.setChecked(false);                    }                }            }        });    }    // 初始化数据    public void initdata() {        list = new ArrayList<Map>();        for (int i = 0; i < str.length; i++) {            HashMap<String, String> map = new HashMap<String, String>();            map.put("content", str[i]);            map.put("flag", "false");            list.add(map);        }    }    /**     * 控制编辑按钮的显示     *      * @param edit     */    private void toggle(boolean edit) {        if (edit) {            txt_edit.setText("编辑");            txt_delete.setVisibility(View.GONE);            delete_all_linear.setVisibility(View.GONE);        } else {            txt_edit.setText("完成");            delete_all_linear.setVisibility(View.VISIBLE);            txt_delete.setVisibility(View.VISIBLE);        }        select_all_check.setChecked(false);        mAdapter.setEditState(edit);        mAdapter.notifyDataSetChanged();        isEdit = !isEdit;    }    /**     * 编辑状态切换     */    private void toggleStaus(View v) {        if (isEdit) {            restData();            toggle(true);        } else {            restData();            toggle(false);        }    }    // 每次编辑完成重置checkbox状态    private void restData() {        for (int i = 0; i < list.size(); i++) {            if (list.get(i).get("flag").equals("true")) {                list.get(i).put("flag", "false");                checkList.clear();            }        }        mAdapter.notifyDataSetChanged();    }    @SuppressWarnings("unchecked")    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.txt_edit:// 切换编辑            toggleStaus(v);            break;        case R.id.txt_delete:// 删除            list.removeAll(checkList);            checkList.clear();            mAdapter.notifyDataSetChanged();            break;        case R.id.check_selectall:// 全选            if (select_all_check.isChecked() == true) {                for (int i = 0; i < list.size(); i++) {                    list.get(i).put("flag", "true");                }                // 数量设为list的长度                checkList.addAll(list);                mAdapter.notifyDataSetChanged();            } else {                restData();            }            break;        }    }}

适配器代码

public class SelectBoxAdapter extends BaseAdapter {    private Activity mContext;    private LayoutInflater inflater;    private List<Map> mList;    // 是否编辑完成    private boolean isEditState = true;    public SelectBoxAdapter(Activity context,List<Map> list) {        this.mContext = context;        this.mList = list;        inflater = LayoutInflater.from(mContext);    }     /**     * 切换 "编辑" "完成" 状态     */    public void setEditState(boolean editState) {        this.isEditState = editState;    }    public boolean getEditState() {        return isEditState;    }    @Override    public int getCount() {        return mList.size();    }    @Override    public Object getItem(int position) {        return mList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder mHolder = null;        Map item = mList.get(position);        if(convertView == null){            mHolder = new ViewHolder();            convertView = inflater.inflate(R.layout.item_checkbox, null);            mHolder.check_select = (CheckBox)convertView.findViewById(R.id.check_select);            mHolder.txt_select = (TextView)convertView.findViewById(R.id.txt_select);            convertView.setTag(mHolder);        }else {            mHolder = (ViewHolder)convertView.getTag();        }        mHolder.txt_select.setText(item.get("content").toString());        mHolder.check_select.setChecked(item.get("flag").equals("true"));        mHolder.check_select.setVisibility(isEditState ? View.GONE : View.VISIBLE);        return convertView;    }    class ViewHolder{         CheckBox check_select;         TextView txt_select;    }}

代码其实挺简单的,在这里主要是想记录一下。完整的项目在我的qq群里面有,有想要源码的可以加我的技术群 174905615。大家一起交流学习,谢谢。

0 0
原创粉丝点击