效果图如下:
http://s6/mw690/b37dcd97gx6Dgl03Dcp65&690
1、main.xml
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
<LinearLayout
android:id="@+id/line"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_below="@+id/tv"
android:orientation="horizontal"
>
<Button
android:id="@+id/bt_selectall"
android:layout_width="80dp"
android:layout_height="fill_parent"
android:text="全选" />
<Button
android:id="@+id/bt_cancleselectall"
android:layout_width="80dp"
android:layout_height="fill_parent"
android:text="反选" />
<Button
android:id="@+id/bt_deselectall"
android:layout_width="100dp"
android:layout_height="fill_parent"
android:text="取消选择" />
</LinearLayout>
<ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/line"
/>
</RelativeLayout>
2、listviewitem.xml
<?xml version="1.0"
encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/item_tv"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1" />
<CheckBox
android:id="@+id/item_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center_vertical"
/>
</LinearLayout>
3、MyAdapter.java
package com.example.checkboxactivity;
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
{
//
填充数据的list
private
ArrayList<String>
list;
//
用来控制CheckBox的选中状况
private
static HashMap<Integer, Boolean>
isSelected;
//
上下文
private
Context context;
//
用来导入布局
private
LayoutInflater inflater = null;
//
构造器
public
MyAdapter(ArrayList<String> list,
Context context) {
this.context = context;
this.list = list;
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.listviewitem,
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) {
MyAdapter.isSelected = isSelected;
}
public
static class ViewHolder {
TextView tv;
CheckBox cb;
}
}
4、Ex_checkboxActivity.java
package com.example.checkboxactivity;
import java.util.ArrayList;
import com.example.checkboxactivity.MyAdapter.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 Ex_checkboxActivity extends Activity
{
private
ListView lv;
private
MyAdapter mAdapter;
private
ArrayList<String>
list;
private
Button bt_selectall;
private
Button bt_cancel;
private
Button bt_deselectall;
private int
checkNum; // 记录选中的条目数量
private
TextView tv_show;// 用于显示选中的条目数量
@Override
public 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_cancleselectall);
bt_deselectall = (Button)
findViewById(R.id.bt_deselectall);
tv_show = (TextView) findViewById(R.id.tv);
list = new
ArrayList<String>();
// 为Adapter准备数据
initDate();
// 实例化自定义的MyAdapter
mAdapter = new MyAdapter(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++)
{
MyAdapter.getIsSelected().put(i, true);
}
// 数量设为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 (MyAdapter.getIsSelected().get(i)) {
MyAdapter.getIsSelected().put(i, false);
checkNum--;
} else {
MyAdapter.getIsSelected().put(i, true);
checkNum++;
}
}