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
- ListView CheckBox 全选,单选
- android ListView中Checkbox实现单选,全选,全不选功能
- ListView添加CheckBox实现单选全选(链接)
- checkbox的单选、全选
- 带checkbox的listview,全选、删除、增加单条功能
- ListView+CheckBox实现全选和反选
- ListView中的CheckBox全选反选
- ListView + CheckBox (全选,反选,取消)
- ListView和CheckBox嵌套,全选,反选
- listView进行CheckBox的全选、反选
- ListView全选删除CheckBox
- Listview中CheckBox全选
- checkbox 的单选与全选
- checkbox全选和单选操作
- angularjs checkbox全选单选批量删除
- android Listview checkbox 单选
- Android ListView单选CheckBox
- listview+checkbox实现单选
- 容易忘的CSS总结前端项目中可能用到的CSS总结
- Paper: Saliency Mapping Enhanced by Structure Tensor is published
- Flume之ChannelSelector源码分析
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
- Android 关于启动过程的一些文章
- ListView CheckBox 全选,单选
- Python - sorted 排序
- Android实战页面内容加载动画
- 深度学习算法原理——Softmax回归
- 欢迎使用CSDN-markdown编辑器
- 图的深度优先遍历(DFS)
- hibernate生成过后无报错500错误
- asterisk compiling with mp3
- 004 Median of Two Sorted Arrays [Leetcode]