ListView+CheckBox实现全选 单击效果

在网上也找了一些案例,但都是用Map来实现的.我的是把对象绑定到当前控件上.代码稍微简洁.


main布局文件:main.xml

  1. xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/tv"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_gravity="center_vertical" />  
  12.   
  13.     <LinearLayout  
  14.         android:id="@+id/line"  
  15.         android:layout_width="fill_parent"  
  16.         android:layout_height="50dp"  
  17.         android:layout_below="@+id/tv"  
  18.         android:orientation="horizontal" >  
  19.   
  20.         <Button  
  21.             android:id="@+id/bt_selectall"  
  22.             android:layout_width="80dp"  
  23.             android:layout_height="fill_parent"  
  24.             android:text="全选" />  
  25.   
  26.         <Button  
  27.             android:id="@+id/bt_deselectall"  
  28.             android:layout_width="80dp"  
  29.             android:layout_height="fill_parent"  
  30.             android:text="取消选择" />  
  31.     LinearLayout>  
  32.   
  33.     <ListView  
  34.         android:id="@+id/lv"  
  35.         android:layout_width="fill_parent"  
  36.         android:layout_height="fill_parent"  
  37.         android:layout_below="@+id/line" />  
  38.   
  39. RelativeLayout>  

ListItem布局文件:listviewitem.xml

  1. xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/item_tv"  
  9.         android:layout_width="0dp"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_gravity="center_vertical"  
  12.         android:layout_weight="1" />  
  13.   
  14.     <CheckBox  
  15.         android:id="@+id/item_cb"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:clickable="false"  
  19.         android:focusable="false"  
  20.         android:focusableInTouchMode="false"  
  21.         android:gravity="center_vertical" />  
  22.   
  23. LinearLayout>  


实体类:Person.java

  1. package com.example.listview_checkbox;  
  2.   
  3. public class Person {  
  4.     private int id;  
  5.     private String name;  
  6.     private boolean selected;  
  7.       
  8.     public Person(int id, String name, boolean selected) {  
  9.         super();  
  10.         this.id = id;  
  11.         this.name = name;  
  12.         this.selected = selected;  
  13.     }  
  14.   
  15.     public int getId() {  
  16.         return id;  
  17.     }  
  18.   
  19.     public void setId(int id) {  
  20.         this.id = id;  
  21.     }  
  22.   
  23.     public String getName() {  
  24.         return name;  
  25.     }  
  26.   
  27.     public void setName(String name) {  
  28.         this.name = name;  
  29.     }  
  30.   
  31.     public boolean isSelected() {  
  32.         return selected;  
  33.     }  
  34.   
  35.     public void setSelected(boolean selected) {  
  36.         this.selected = selected;  
  37.     }  
  38.   
  39. }  


MainActivity.java

  1. package com.example.listview_checkbox;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6.   
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.BaseAdapter;  
  13. import android.widget.Button;  
  14. import android.widget.CheckBox;  
  15. import android.widget.ListView;  
  16. import android.widget.TextView;  
  17.   
  18. public class MainActivity extends Activity{  
  19.     private List listPerson;  
  20.     private List selectPerson=new ArrayList();  
  21.     private MyAdapter mAdapter;  
  22.     private TextView tv;  
  23.       
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);   
  28.         ListView listView=(ListView) findViewById(R.id.lv);  
  29.         listPerson = new ArrayList();  
  30.         initDate();  
  31.         listView.setAdapter(mAdapter=new MyAdapter());  
  32.           
  33.         Button btSelectall=(Button) findViewById(R.id.bt_selectall);  
  34.         btSelectall.setOnClickListener(clickListener);  
  35.         Button btDeselectall=(Button) findViewById(R.id.bt_deselectall);  
  36.         btDeselectall.setOnClickListener(clickListener);  
  37.           
  38.         tv=(TextView) findViewById(R.id.tv);  
  39.     }  
  40.       
  41.     // 初始化数据    
  42.     private void initDate() {    
  43.         for (int i = 0; i < 15; i++) {  
  44.             Person person=new Person(i, "复选框"+i, false);  
  45.             listPerson.add(person);  
  46.         }    
  47.     }    
  48.       
  49.     private class MyAdapter extends BaseAdapter{  
  50.         @Override  
  51.         public int getCount() {  
  52.             return listPerson.size();  
  53.         }  
  54.   
  55.         @Override  
  56.         public Object getItem(int position) {  
  57.             return listPerson.get(position);  
  58.         }  
  59.   
  60.         @Override  
  61.         public long getItemId(int position) {  
  62.             return listPerson.get(position).getId();  
  63.         }  
  64.   
  65.         @Override  
  66.         public View getView(int position, View convertView, ViewGroup parent) {  
  67.             ViewHolder holder = null;  
  68.             if (convertView == null) {  
  69.                 // 获得ViewHolder对象  
  70.                 holder = new ViewHolder();  
  71.                 // 导入布局并赋值给convertview  
  72.                 convertView=View.inflate(MainActivity.this, R.layout.listviewitem, null);  
  73.                 holder.tv = (TextView) convertView.findViewById(R.id.item_tv);  
  74.                 holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);  
  75.                 // 为view设置标签  
  76.                 convertView.setTag(holder);  
  77.             } else {  
  78.                 // 取出holder  
  79.                 holder = (ViewHolder) convertView.getTag();  
  80.             }  
  81.             Person person=listPerson.get(position);  
  82.             // 设置list中TextView的显示  
  83.             holder.tv.setText(person.getName());  
  84.             // 根据isSelected来设置checkbox的选中状况  
  85.             holder.cb.setChecked(person.isSelected());  
  86.             holder.cb.setTag(person);  
  87.             holder.cb.setOnClickListener(clickListener);  
  88.             return convertView;  
  89.         }  
  90.           
  91.         public  class ViewHolder {  
  92.             TextView tv;  
  93.             CheckBox cb;  
  94.         }  
  95.     }  
  96.       
  97.     private OnClickListener clickListener=new OnClickListener() {  
  98.         @Override  
  99.         public void onClick(View v) {  
  100.             switch (v.getId()) {  
  101.             case R.id.item_cb:  
  102.                 Person person = (Person) v.getTag();  
  103.                 person.setSelected(!person.isSelected());  
  104.                 if (person.isSelected()) {  
  105.                     selectPerson.add(person);  
  106.                 }else {  
  107.                     selectPerson.remove(person);  
  108.                 }  
  109.                 tv.setText("您选中了"+selectPerson.size()+"条数据!!");  
  110.                 break;  
  111.             case R.id.bt_selectall:  
  112.                 selected(true);  
  113.                 break;  
  114.             case R.id.bt_deselectall:  
  115.                 selected(false);  
  116.                 break;  
  117.             default:  
  118.                 break;  
  119.             }  
  120.         }  
  121.     };  
  122.       
  123.     private void selected(boolean selected){//选择或者取消选中  
  124.         selectPerson.clear();  
  125.         for(int i=0;i
  126.             Person person=listPerson.get(i);  
  127.             person.setSelected(selected);  
  128.             if(selected==true){  
  129.                 selectPerson.add(person);  
  130.             }  
  131.         }  
  132.         mAdapter.notifyDataSetChanged();  
  133.         tv.setText("您选中了"+selectPerson.size()+"条数据!!");  
  134.     }  
  135. }  


效果图如下:

ListView+CheckBox实现全选 单击效果_第1张图片


你可能感兴趣的:(ListView+CheckBox实现全选 单击效果)