Android中ListView结合CheckBox判断选中项

本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作。通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项。

[1] 程序结构图如下:

listitem.xml:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
  xmlns:android="http://schemas.android.com/apk/res/android"  
  android:orientation="vertical"  
  android:layout_width="fill_parent"  
  android:layout_height="fill_parent">  
  <LinearLayout  
     android:layout_width="fill_parent"  
     android:layout_height="wrap_content"  
     android:orientation="horizontal"  
     android:descendantFocusability="blocksDescendants">  
      <CheckBox  
         android:id="@+id/list.select"  
         android:layout_width="wrap_content"  
         android:layout_height="wrap_content"/>  
      <TextView  
         android:id="@+id/list.name"  
         android:layout_width="fill_parent"  
         android:layout_height="wrap_content"  
         android:layout_weight="1"  
         android:text="Name"  
         android:layout_gravity="center"  
         android:textSize="20dp"  
         android:layout_marginLeft="10dp"/>  
      <TextView  
         android:id="@+id/list.address"  
         android:layout_width="fill_parent"  
         android:layout_height="wrap_content"  
         android:layout_weight="1"  
         android:text="Address"  
         android:layout_gravity="center"  
         android:textSize="20dp"/>  
  </LinearLayout>  
</LinearLayout>  

 main.xml:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  
    <Button  
       android:id="@+id/show"  
       android:layout_width="fill_parent"  
       android:layout_height="wrap_content"  
       android:text="Show"/>  
    <ListView  
       android:id="@+id/lvperson"  
       android:layout_width="fill_parent"  
       android:layout_height="fill_parent"/>  
</LinearLayout>  

 Person.java:

package com.andyidea.bean;  
  
public class Person {  
  
    private String name;  
    private String address;  
      
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public String getAddress() {  
        return address;  
    }  
    public void setAddress(String address) {  
        this.address = address;  
    }  
      
}  

 MainActivity.java:

package com.andyidea.listview;  
  
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
  
import com.andyidea.bean.Person;  
  
import android.app.Activity;  
import android.app.AlertDialog;  
import android.content.Context;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.BaseAdapter;  
import android.widget.Button;  
import android.widget.CheckBox;  
import android.widget.ListView;  
import android.widget.TextView;  
  
public class MainActivity extends Activity {  
      
    Button show;  
    ListView lv;  
    List<Person> persons = new ArrayList<Person>();  
    Context mContext;  
    MyListAdapter adapter;  
    List<Integer> listItemID = new ArrayList<Integer>();  
      
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        mContext = getApplicationContext();  
        show = (Button)findViewById(R.id.show);  
        lv = (ListView)findViewById(R.id.lvperson);  
          
        initPersonData();  
        adapter = new MyListAdapter(persons);  
        lv.setAdapter(adapter);  
          
        show.setOnClickListener(new View.OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                  
                listItemID.clear();  
                for(int i=0;i<adapter.mChecked.size();i++){  
                    if(adapter.mChecked.get(i)){  
                        listItemID.add(i);  
                    }  
                }  
                  
                if(listItemID.size()==0){  
                    AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);  
                    builder1.setMessage("没有选中任何记录");  
                    builder1.show();  
                }else{  
                    StringBuilder sb = new StringBuilder();  
                      
                    for(int i=0;i<listItemID.size();i++){  
                        sb.append("ItemID="+listItemID.get(i)+" . ");  
                    }  
                    AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);  
                    builder2.setMessage(sb.toString());  
                    builder2.show();  
                }  
            }  
        });  
    }  
      
    /**  
     * 模拟数据  
     */  
    private void initPersonData(){  
        Person mPerson;  
        for(int i=1;i<=12;i++){  
            mPerson = new Person();  
            mPerson.setName("Andy"+i);  
            mPerson.setAddress("GuangZhou"+i);  
            persons.add(mPerson);  
        }  
    }  
      
    //自定义ListView适配器  
    class MyListAdapter extends BaseAdapter{  
        List<Boolean> mChecked;  
        List<Person> listPerson;  
        HashMap<Integer,View> map = new HashMap<Integer,View>();   
          
        public MyListAdapter(List<Person> list){  
            listPerson = new ArrayList<Person>();  
            listlistPerson = list;  
              
            mChecked = new ArrayList<Boolean>();  
            for(int i=0;i<list.size();i++){  
                mChecked.add(false);  
            }  
        }  
  
        @Override  
        public int getCount() {  
            return listPerson.size();  
        }  
  
        @Override  
        public Object getItem(int position) {  
            return listPerson.get(position);  
        }  
  
        @Override  
        public long getItemId(int position) {  
            return position;  
        }  
  
        @Override  
        public View getView(int position, View convertView, ViewGroup parent) {  
            View view;  
            ViewHolder holder = null;  
              
            if (map.get(position) == null) {  
                Log.e("MainActivity","position1 = "+position);  
                  
                LayoutInflater mInflater = (LayoutInflater) mContext  
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
                view = mInflater.inflate(R.layout.listitem, null);  
                holder = new ViewHolder();  
                holder.selected = (CheckBox)view.findViewById(R.id.list_select);  
                holder.name = (TextView)view.findViewById(R.id.list_name);  
                holder.address = (TextView)view.findViewById(R.id.list_address);  
                final int p = position;  
                map.put(position, view);  
                holder.selected.setOnClickListener(new View.OnClickListener() {  
                      
                    @Override  
                    public void onClick(View v) {  
                        CheckBox cb = (CheckBox)v;  
                        mChecked.set(p, cb.isChecked());  
                    }  
                });  
                view.setTag(holder);  
            }else{  
                Log.e("MainActivity","position2 = "+position);  
                view = map.get(position);  
                holder = (ViewHolder)view.getTag();  
            }  
              
            holder.selected.setChecked(mChecked.get(position));  
            holder.name.setText(listPerson.get(position).getName());  
            holder.address.setText(listPerson.get(position).getAddress());  
              
            return view;  
        }  
          
    }  
      
    static class ViewHolder{  
        CheckBox selected;  
        TextView name;  
        TextView address;  
    }  
}  

 运行结果:

 

 

posted on 2013-07-11 00:10  leihupqrst  阅读(321)  评论(0编辑  收藏  举报

导航