activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="100dp"
android:dividerHeight="1px"
android:scrollbars="none" />
<Button
android:id="@+id/all_sel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="50dip"
android:text="全选" />
<Button
android:id="@+id/all_unsel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="全部取消" />
</FrameLayout>
check_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="68dp">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:layout_marginRight="15dip"
android:button="@drawable/checkbox_selector"
android:clickable="false"
android:focusable="false" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="17dp"
android:layout_marginTop="17dp"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp" />
<TextView
android:id="@+id/subtitle"
android:textSize="12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</FrameLayout>
checkbox_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<!--checkbox的selector,现在使用的系统的,待修改为自己的-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:drawable/checkbox_on_background" android:state_checked="true" />
<item android:drawable="@android:drawable/checkbox_off_background" android:state_checked="false" />
<item android:drawable="@android:drawable/checkbox_off_background" />
</selector>
DataHolder
package com.harvic.trylistviewcheckboxdata;
public class DataHolder{
public String titleStr;
public String subTitleStr;
public boolean checked;
public DataHolder(String title,String subTitle,boolean check){
titleStr = title;
subTitleStr = subTitle;
checked=check;
}
}
MainActivity
package com.harvic.trylistviewcheckboxdata;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据
final List<DataHolder> dataList = new ArrayList<DataHolder>();
for (int i = 0; i < 10; i++) {
dataList.add(new DataHolder("Geek------" + i, "Geek..",
false));
}
// 构造Adapter
final ListitemAdapter adapter = new ListitemAdapter(MainActivity.this,
dataList);
// 设置adapter
final ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
/**
* 设置ListItem点击监听函数---就是切换CheckBox的状态
*/
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//被选中状态
boolean checked = dataList.get(position).checked;
//如果没有被选中,就改成被选中状态
if (!checked) {
dataList.get(position).checked = true;
} else {
//荣国被选中状态,就改成未被选中状态
dataList.get(position).checked = false;
}
adapter.notifyDataSetChanged();
}
});
// 全选按钮按钮设置
Button all_sel = (Button) findViewById(R.id.all_sel);
Button all_unsel = (Button) findViewById(R.id.all_unsel);
all_sel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < dataList.size(); i++) {
dataList.get(i).checked = true;
}
adapter.notifyDataSetChanged();
}
});
// 全部取消的设置
all_unsel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < dataList.size(); i++) {
dataList.get(i).checked = false;
}
adapter.notifyDataSetChanged();
}
});
}
}
ListitemAdapter
package com.harvic.trylistviewcheckboxdata;
import java.util.List;
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 ListitemAdapter extends BaseAdapter {
private List<DataHolder> mList;
private Context mContext;
private LayoutInflater mInflater;
public ListitemAdapter(Context context, List<DataHolder> list) {
mList = list;
mContext = context;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.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) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.check_list_item, null);
holder.mTitle = (TextView) convertView.findViewById(R.id.title);
holder.mSubTitile = (TextView) convertView
.findViewById(R.id.subtitle);
holder.mCheckBox = (CheckBox) convertView
.findViewById(R.id.checkbox);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mTitle.setText((String) mList.get(position).titleStr);
holder.mSubTitile.setText((String) mList.get(position).subTitleStr);
holder.mCheckBox.setChecked(mList.get(position).checked);
return convertView;
}
public class ViewHolder {
public TextView mTitle;
public TextView mSubTitile;
public CheckBox mCheckBox;
};
}