最近用到ListView组合CheckBox实现多选功能,自己写了一个Demo
MainActivity代码
package com.xudl.checkdemo;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity {private Button mButtonGetValue; // 获取数据按钮private ListView mListView;// 数据展示列表private CheckboxAdapter listItemAdapter; // ListView数据展示适配器private ArrayList> listData;// ListView展示数据源@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();registerListener();listData = new ArrayList>();initListViewData(listData);loadData();}/** * 初始化布局 */private void initView() {mButtonGetValue = (Button) findViewById(R.id.get_value);mListView = (ListView) findViewById(R.id.list);}private void registerListener() {mButtonGetValue.setOnClickListener(new OnClickListenerImpl());}/** * 加载数据 */private void loadData() {listItemAdapter = new CheckboxAdapter(this, listData);mListView.setAdapter(listItemAdapter);}/** * 初始化ListView数据源 *  * @param listData */private void initListViewData(ArrayList> listData) {if (listData == null)listData = new ArrayList>();String[] name = { "William", "Charles", "Linng", "Json", "Bob", "Carli", "William", "Charles", "Linng", "Json", "Bob", "Carli" };String[] id = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };for (int i = 0; i < 12; i++) {HashMap map = new HashMap();map.put("friend_image", R.drawable.ic_launcher);map.put("friend_username", name[i]);map.put("friend_id", id[i]);map.put("selected", false);// 向容器添加数据listData.add(map);}}// 获取Checkbox值的点击事件private class OnClickListenerImpl implements OnClickListener {@Overridepublic void onClick(View v) {HashMap> state = listItemAdapter.state;String options = "选中数据:";for (int j = 0; j < listItemAdapter.getCount(); j++) {System.out.println("state.get(" + j + ")==" + state.get(j));if (state.get(j) != null) {@SuppressWarnings("unchecked")HashMap map = (HashMap) listItemAdapter.getItem(j);String username = map.get("friend_username").toString();String id = map.get("friend_id").toString();options += "\n" + id + "." + username;}}// 展示数据Toast.makeText(getApplicationContext(), options, Toast.LENGTH_LONG).show();}}}


   
   
Adapter适配器代码

package com.xudl.checkdemo;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.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ImageView;import android.widget.TextView;public class CheckboxAdapter extends BaseAdapter {private Context context;private ArrayList> listData;//checkbox选中的数据HashMap> state = new HashMap>();// 构造方法初始化数据public CheckboxAdapter(Context context, ArrayList> listData) {this.context = context;this.listData = listData;}@Overridepublic int getCount() {return (listData != null && !listData.isEmpty())?listData.size():0;}@Overridepublic Object getItem(int position) {return listData.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {LayoutInflater mInflater = LayoutInflater.from(context);convertView = mInflater.inflate(R.layout.item_list, null);ImageView image = (ImageView) convertView.findViewById(R.id.friend_image);final HashMap viewData = listData.get(position);image.setBackgroundResource((Integer) viewData.get("friend_image"));TextView username = (TextView) convertView.findViewById(R.id.friend_username);username.setText((String) viewData.get("friend_username"));TextView id = (TextView) convertView.findViewById(R.id.friend_id);id.setText((String) viewData.get("friend_id"));CheckBox check = (CheckBox) convertView.findViewById(R.id.selected);check.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (isChecked) {state.put(position, viewData);} else {state.remove(position);}}});check.setChecked((state.get(position) == null ? false : true));return convertView;}}

   

activity_main布局代码

<?xml version="1.0" encoding="utf-8"?>    


适配器文件item_list代码

<?xml version="1.0" encoding="utf-8"?>                


效果如下




更多相关文章

  1. Android开发学习——android与服务器端数据交互
  2. android sqlite3 数据库升级,加字段
  3. android 读取json数据(遍历JSONObject和JSONArray
  4. Android listView FastScroll 快速查询数据
  5. 柱状图以及饼图进行数据统计
  6. android 升级数据库 修改表结构
  7. android从web应用读取xml和json数据实战
  8. android get请求数据
  9. android intent 传数据

随机推荐

  1. Android 中的 Drawable
  2. Android系统层次结构及分析
  3. Android Fragment 使用
  4. Android实现在webview中长按图片弹出菜单
  5. Android(安卓)Studio如何添加工程(project
  6. Android中关于startActivityForResult()
  7. Android Studio 连接夜神模拟器
  8. Android Ap 开发 设计模式第二篇:适配器模
  9. 小记Activity生命周期(onCreate)
  10. unity和Android之间互相调用