最近用到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展示数据源
@Override
protected 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 {
@Override
public 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;
}
@Override
public int getCount() {
return (listData != null && !listData.isEmpty())?listData.size():0;
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public 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() {
@Override
public 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布局代码