通过下标全选反选,删除
2016-04-16 08:46
337 查看
//主类 package com.example.choose; import java.util.ArrayList; import java.util.List; import com.example.adapter.MyChooseAdapter; import com.example.adapter.MyChooseAdapter.ViewHolder; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { private ListView lv; private MyChooseAdapter mAdapter; private ArrayList<String> list; private Button bt_selectall; private Button bt_cancel; private Button bt_deselectall; private Button deleteitem; private int checkNum; // 记录选中的条目数量 private TextView tv_show;// 用于显示选中的条目数量 private List<String> data;//定义一个集合 保存选中的条目 private TextView add;//勾选商品的总会 private int allnumber=0; private boolean flag=true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); bt_selectall = (Button) findViewById(R.id.bt_selectall); bt_cancel = (Button) findViewById(R.id.bt_cancleselectall); bt_deselectall = (Button) findViewById(R.id.bt_deselectall); deleteitem=(Button) findViewById(R.id.deleteItem); tv_show = (TextView) findViewById(R.id.tv); add=(TextView) findViewById(R.id.add); list = new ArrayList<String>(); // 为Adapter准备数据 initDate(); // 实例化自定义的MyAdapter mAdapter = new MyChooseAdapter(list, this); // 绑定Adapter lv.setAdapter(mAdapter); // 全选按钮的回调接口 bt_selectall.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 遍历list的长度,将MyAdapter中的map值全部设为true for (int i = 0; i < list.size(); i++) { if (MyChooseAdapter.getIsSelected().get(i)==false) { MyChooseAdapter.getIsSelected().put(i, true); if (flag) { allnumber+=Integer.valueOf(list.get(i)); } } } flag=false; // 数量设为list的长度 checkNum = list.size(); // 刷新listview和TextView的显示 dataChanged(); } }); // 反选按钮的回调接口 bt_cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 遍历list的长度,将已选的设为未选,未选的设为已选 for (int i = 0; i < list.size(); i++) { if (MyChooseAdapter.getIsSelected().get(i)) { MyChooseAdapter.getIsSelected().put(i, false); checkNum--; allnumber-=Integer.valueOf(list.get(i)); } else { MyChooseAdapter.getIsSelected().put(i, true); checkNum++; allnumber+=Integer.valueOf(list.get(i)); } } flag=true; // 刷新listview和TextView的显示 dataChanged(); } }); //取消按钮的回调接口 bt_deselectall.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // 遍历list的长度,将已选的按钮设为未选 for (int i = 0; i < list.size(); i++) { if (MyChooseAdapter.getIsSelected().get(i)) { MyChooseAdapter.getIsSelected().put(i, false); checkNum--;// 数量减1 allnumber-=Integer.valueOf(list.get(i)); } } flag=true; // 刷新listview和TextView的显示 dataChanged(); } }); //删除按钮的回调方法 deleteitem.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //遍历list集合 将勾选的在集合中删除 data=new ArrayList<String>(); for (int i = 0; i < list.size(); i++) { if (MyChooseAdapter.getIsSelected().get(i)) { data.add(list.get(i)); MyChooseAdapter.getIsSelected().put(i, false); checkNum--; allnumber-=Integer.valueOf(list.get(i)); } } list.removeAll(data); dataChanged(); } }); // 绑定listView的监听器 lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 ViewHolder holder = (ViewHolder) arg1.getTag(); // 改变CheckBox的状态 holder.cb.toggle(); // 将CheckBox的选中状况记录下来 MyChooseAdapter.getIsSelected().put(arg2, holder.cb.isChecked()); // 调整选定条目 if (holder.cb.isChecked() == true) { checkNum++; allnumber+=Integer.valueOf(list.get(arg2));![这里写图片描述](http://img.blog.csdn.net/20160416084318565) } else { checkNum--; allnumber-=Integer.valueOf(list.get(arg2)); } dataChanged(); } }); } // 初始化数据 private void initDate() { for (int i = 0; i < 50; i++) { list.add(i+""); } } // 刷新listview和TextView的显示 private void dataChanged() { // 通知listView刷新 mAdapter.notifyDataSetChanged(); // TextView显示最新的选中数目 tv_show.setText("已选中" + checkNum + "项"); add.setText("勾选的商品的总和是"+allnumber); }; }
//适配器类 package com.example.adapter; import java.util.ArrayList; import java.util.HashMap; import com.example.choose.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.TextView; public class MyChooseAdapter extends BaseAdapter{ // 填充数据的list private ArrayList<String> list; // 用来控制CheckBox的选中状况 private static HashMap<Integer, Boolean> isSelected; // 上下文 private Context context; // 用来导入布局 private LayoutInflater inflater = null; //构造器 public MyChooseAdapter(ArrayList<String> list, Context context) { super(); this.list = list; this.context = context; inflater = LayoutInflater.from(context); isSelected = new HashMap<Integer, Boolean>(); // 初始化数据 initDate(); } // 初始化isSelected的数据 private void initDate() { for (int i = 0; i < list.size(); i++) { getIsSelected().put(i, false); } } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { // 获得ViewHolder对象 holder = new ViewHolder(); // 导入布局并赋值给convertview convertView = inflater.inflate(R.layout.choose_item, null); holder.tv = (TextView) convertView.findViewById(R.id.item_tv); holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb); // 为view设置标签 convertView.setTag(holder); } else { // 取出holder holder = (ViewHolder) convertView.getTag(); } // 设置list中TextView的显示 holder.tv.setText(list.get(position)); // 根据isSelected来设置checkbox的选中状况 holder.cb.setChecked(getIsSelected().get(position)); return convertView; } public static HashMap<Integer, Boolean> getIsSelected() { return isSelected; } public static void setIsSelected(HashMap<Integer, Boolean> isSelected) { MyChooseAdapter.isSelected = isSelected; } public static class ViewHolder { TextView tv; public CheckBox cb; } }
相关文章推荐
- 【笔试/面试】—— 不使用大于、小于、if 语句,实现 max 宏
- 2016.4.16 随想
- UI中一些不常用的控件UIActivityIndicatorView、UIProgressView、UISegmentedControl、UIStepper、UISwitch、UITextView、UIAlertController
- tmux的使用方法和个性化配置
- activiti实战系列 并行网关(parallelGateWay)
- activiti实战系列 并行网关(parallelGateWay)
- 再学学flash吧 小学生都教不会了
- 年月日计算
- activiti实战系列 排他网关(ExclusiveGateWay)
- centos6.5下python2.6.6版本升级Python2.7.6安装过程
- activiti实战系列 排他网关(ExclusiveGateWay)
- U-BOOT从ROM拷到RAM
- PHP中的变量
- php 纯静态缓存
- git分支更新代码命令
- H.264(H264)视频文件的制作
- PHP基本语法
- 仿ios侧滑退出主题引起的button问题
- 《C++primer》读书笔记二
- WampServer 不能打开phpmyadmin 的解决办法