import java.util.ArrayList;import java.util.HashMap;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 MyAdapter extends BaseAdapter {private ArrayList list;// 用来控制CheckBox的选中状况private static HashMap isSelected;private Context context;private LayoutInflater inflater = null;// 构造器public MyAdapter(ArrayList list, Context context) {this.context = context;this.list = list;inflater = LayoutInflater.from(context);isSelected = new HashMap();// 初始化数据initDate();}// 初始化isSelected的数据private void initDate() {for (int i = 0; i < list.size(); i++) {getIsSelected().put(i, false);}}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = inflater.inflate(R.layout.item, null);holder.tv = (TextView) convertView.findViewById(R.id.item_tv);holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);convertView.setTag(holder);} else {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 getIsSelected() {return isSelected;}public static void setIsSelected(HashMap isSelected) {MyAdapter.isSelected = isSelected;}}


import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Set;import android.app.Activity;import android.os.Bundle;import android.util.Log;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 MainAct extends Activity {private ListView lv;private MyAdapter mAdapter;private ArrayList list;private Button bt_selectall;private Button bt_cancel;private Button bt_deselectall;private int checkNum; // 记录选中的条目数量private TextView tv_show;// 用于显示选中的条目数量private TextView header;Set headerList = null;HashMap map = new HashMap();/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView) findViewById(R.id.lv);bt_selectall = (Button) findViewById(R.id.bt_selectall);bt_cancel = (Button) findViewById(R.id.bt_cancelselectall);bt_deselectall = (Button) findViewById(R.id.bt_deselectall);tv_show = (TextView) findViewById(R.id.tv);header = (TextView) findViewById(R.id.header);list = new ArrayList();// 为Adapter准备数据initDate();// 实例化自定义的MyAdaptermAdapter = new MyAdapter(list, this);// 绑定Adapterlv.setAdapter(mAdapter);// 全选按钮的回调接口bt_selectall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将MyAdapter中的map值全部设为truefor (int i = 0; i < list.size(); i++) {MyAdapter.getIsSelected().put(i, true);}// 数量设为list的长度checkNum = list.size();// 刷新listview和TextView的显示dataChanged();}});// 取消按钮的回调接口bt_cancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将已选的按钮设为未选for (int i = 0; i < list.size(); i++) {if (MyAdapter.getIsSelected().get(i)) {MyAdapter.getIsSelected().put(i, false);checkNum--;// 数量减1}}// 刷新listview和TextView的显示dataChanged();}});// 反选按钮的回调接口bt_deselectall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将已选的设为未选,未选的设为已选for (int i = 0; i < list.size(); i++) {if (MyAdapter.getIsSelected().get(i)) {MyAdapter.getIsSelected().put(i, false);checkNum--;} else {MyAdapter.getIsSelected().put(i, true);checkNum++;}}// 刷新listview和TextView的显示dataChanged();}});// 绑定listView的监听器lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤ViewHolder holder = (ViewHolder) arg1.getTag();// 改变CheckBox的状态holder.cb.toggle();// 将CheckBox的选中状况记录下来MyAdapter.getIsSelected().put(arg2, holder.cb.isChecked());// 调整选定条目if (holder.cb.isChecked() == true) {checkNum++; map.put(arg2, holder.tv.getText().toString());} else {checkNum--;map.remove(arg2);}headerList = map.keySet();for(Iterator it = headerList.iterator(); it.hasNext();){int ii = it.next();Log.i("main", "---" + map.size() + ", " + ii + ", " + map.get(ii));}// 用TextView显示tv_show.setText("已选中" + checkNum + "项");}});}// 初始化数据private void initDate() {for (int i = 0; i < 15; i++) {list.add("data" + "   " + i);}}// 刷新listview和TextView的显示private void dataChanged() {// 通知listView刷新mAdapter.notifyDataSetChanged();// TextView显示最新的选中数目tv_show.setText("已选中" + checkNum + "项");}}


更多相关文章

  1. 单选按钮和复选框
  2. Android(安卓)淘宝购物车细节详情
  3. Android(安卓)到底什么是Dialog?
  4. Android(安卓)自定义DialogProgress
  5. android app全屏显示
  6. 关于NotificationManager.notify 异常解决
  7. android 进度条学习
  8. 以Dialog方式显示activity
  9. Android控件显示与隐藏

随机推荐

  1. ListView 实现像Android(安卓)Market那样
  2. Android(安卓)各种Span示例
  3. Android(安卓)Monkey
  4. Android:开发环境搭建
  5. Android调用系统 Set As Intent
  6. Unity同步加载Android里的StreamingAsset
  7. Android(安卓)Activity 生命周期 跟踪完
  8. android6.0 netd设置dns
  9. Android(安卓)开发常用代码片段
  10. Android之万能适配器Adapter的使用