说一下思路,借助一个抽象的checkboxbean模型,来对应每一个checkbox的选中状态:,然后根据checkboxbean的属性来进行相应的操作
1,首先来看效果图:
2,再看布局文件:
主布局:
<?xml version="1.0" encoding="utf-8"?>
<!--activity_main 布局文件-->
<RelativeLayout
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"
tools:context="com.wang.www.selectalldemo.MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/linearlayout"></ListView>
<RelativeLayout
android:id="@+id/linearlayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:checked="false"
android:gravity="center"
android:text="全选"/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="删除"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载"
android:id="@+id/button2"
android:onClick="loadData"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/button"
android:layout_toStartOf="@+id/button"/>
</RelativeLayout>
</RelativeLayout>
单项布局:
<?xml version="1.0" encoding="utf-8"?>
<!--单项布局,一个chenckbox,一个textview-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkBox_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="选中"/>
<TextView
android:id="@+id/textView_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第几项"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
</LinearLayout>
3,代码
checkbox抽象模型:
/**
* Created by wang on 2016/5/12.
* checkbox抽象模型,用来保存每一个checkbox的选中状态
*/
public class CheckBoxBean {
private boolean isChecked;
public CheckBoxBean() {
}
public CheckBoxBean(boolean isChecked) {
this.isChecked = isChecked;
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
}
Activity:
package com.wang.www.selectalldemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "selectalldemo";
private CheckBox checkBox;
private ListView listView;
private Button button;
MyAdapter adapter;
private List<String> list = new ArrayList<>();
private List<CheckBoxBean> boxList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList();
initBoxBeanList();
initView();
}
private void initBoxBeanList() {
boxList.clear();
for (int i = 0; i < list.size(); i++) {
boxList.add(new CheckBoxBean(false));
}
}
private void initList() {
list.add("0");
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("10");
list.add("11");
list.add("12");
list.add("13");
list.add("14");
list.add("15");
list.add("16");
list.add("17");
list.add("18");
list.add("19");
list.add("20");
}
private void initView() {
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteCheckedItem();
}
});
listView = (ListView) findViewById(R.id.listview);
adapter = new MyAdapter(list,boxList,this);
listView.setAdapter(adapter);
checkBox = (CheckBox) findViewById(R.id.checkBox);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
selectAll(isChecked);
adapter.notifyDataSetChanged();
}
});
}
/**
* 删除选中项
*/
private void deleteCheckedItem() {
int count = list.size() - 1 ;
//从大都小遍历,否则,从小到大遍历的话会出现错位
for (int i = count ; i >= 0 ; i--) {
if (boxList.get(i).isChecked()){
list.remove(i);
}
}
//如果是全部删除,全选框设为未选中
if (list.size()==0){
checkBox.setChecked(false);
}
initBoxBeanList();
adapter.notifyDataSetChanged();
}
/**
* 单项中选中状态改变时,由adpater回调
* @param position
* @param isChecked
*/
public void checkedStateChange(int position, boolean isChecked) {
boxList.get(position).setChecked(isChecked);
adapter.notifyDataSetChanged();
}
/**
* 是否全选
* @param isChecked
* true:全选
* false:全不选
*/
private void selectAll(boolean isChecked) {
for (int i = 0; i < boxList.size(); i++) {
boxList.get(i).setChecked(isChecked);
}
}
/**
* 点击加载数据,重新初始化
* @param v
*/
public void loadData(View v){
initList();
initBoxBeanList();
adapter.notifyDataSetChanged();
}
}
Adapter:
package com.wang.www.selectalldemo;
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.TextView;
import java.util.List;
/**
* Created by wang on 2016/5/11.
*/
public class MyAdapter extends BaseAdapter {
private static final String TAG = "selectalldemo";
private List<String> list;
private List<CheckBoxBean> boxBeanList;
private Context context;
public MyAdapter(List<String> list, List<CheckBoxBean> boxBeanList, Context context) {
this.list = list;
this.boxBeanList = boxBeanList;
this.context = context;
}
@Override
public int getCount() {
return list == null ? 0 : list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(list.get(position));
//设置监听
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
MainActivity mainActivity = (MainActivity) context;
mainActivity.checkedStateChange(position, isChecked);
}
});
//根据集合中的 抽象模型的属性的设置checkbox的选中状态
holder.checkBox.setChecked(boxBeanList.get(position).isChecked());
return convertView;
}
class ViewHolder {
CheckBox checkBox;
TextView textView;
public ViewHolder(View itemView) {
checkBox = (CheckBox) itemView.findViewById(R.id.checkBox_item);
textView = (TextView) itemView.findViewById(R.id.textView_item);
}
}
}