Android ListView组合CheckBox实现多选获取数据
16lz
2021-01-23
最近用到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"?>
<?xml version="1.0" encoding="utf-8"?>
更多相关文章
- Android开发学习——android与服务器端数据交互
- android sqlite3 数据库升级,加字段
- android 读取json数据(遍历JSONObject和JSONArray
- Android listView FastScroll 快速查询数据
- 柱状图以及饼图进行数据统计
- android 升级数据库 修改表结构
- android从web应用读取xml和json数据实战
- android get请求数据
- android intent 传数据