Android中ListView结合CheckBox判断选中项

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

[1] 程序结构图如下:


其中Person.java是实体类,MainActivity.java是Activity组件类。listitem.xml是自定义的列表每项布局文件。

[2] listitem.xml布局文件源码如下:

01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout
03  xmlns:android="http://schemas.android.com/apk/res/android"
04  android:orientation="vertical"
05  android:layout_width="fill_parent"
06  android:layout_height="fill_parent">
07  <LinearLayout
08     android:layout_width="fill_parent"
09     android:layout_height="wrap_content"
10     android:orientation="horizontal"
11     android:descendantFocusability="blocksDescendants">
12      <CheckBox
13         android:id="@+id/list.select"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"/>
16      <TextView
17         android:id="@+id/list.name"
18         android:layout_width="fill_parent"
19         android:layout_height="wrap_content"
20         android:layout_weight="1"
21         android:text="Name"
22         android:layout_gravity="center"
23         android:textSize="20dp"
24         android:layout_marginLeft="10dp"/>
25      <TextView
26         android:id="@+id/list.address"
27         android:layout_width="fill_parent"
28         android:layout_height="wrap_content"
29         android:layout_weight="1"
30         android:text="Address"
31         android:layout_gravity="center"
32         android:textSize="20dp"/>
33  </LinearLayout>
34</LinearLayout>

[3] main.xml布局文件源码如下:
01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical"
04    android:layout_width="fill_parent"
05    android:layout_height="fill_parent">
06    <Button
07       android:id="@+id/show"
08       android:layout_width="fill_parent"
09       android:layout_height="wrap_content"
10       android:text="Show"/>
11    <ListView
12       android:id="@+id/lvperson"
13       android:layout_width="fill_parent"
14       android:layout_height="fill_parent"/>
15</LinearLayout>

[4] Person.java实体类源码如下:
01package com.andyidea.bean;
02  
03public class Person {
04  
05    private String name;
06    private String address;
07      
08    public String getName() {
09        return name;
10    }
11    public void setName(String name) {
12        this.name = name;
13    }
14    public String getAddress() {
15        return address;
16    }
17    public void setAddress(String address) {
18        this.address = address;
19    }
20      
21}

[5] MainActivity.java类源码如下:
001package com.andyidea.listview;
002  
003import java.util.ArrayList;
004import java.util.HashMap;
005import java.util.List;
006  
007import com.andyidea.bean.Person;
008  
009import android.app.Activity;
010import android.app.AlertDialog;
011import android.content.Context;
012import android.os.Bundle;
013import android.util.Log;
014import android.view.LayoutInflater;
015import android.view.View;
016import android.view.ViewGroup;
017import android.widget.BaseAdapter;
018import android.widget.Button;
019import android.widget.CheckBox;
020import android.widget.ListView;
021import android.widget.TextView;
022  
023public class MainActivity extends Activity {
024      
025    Button show;
026    ListView lv;
027    List<Person> persons = new ArrayList<Person>();
028    Context mContext;
029    MyListAdapter adapter;
030    List<Integer> listItemID = new ArrayList<Integer>();
031      
032    /** Called when the activity is first created. */
033    @Override
034    public void onCreate(Bundle savedInstanceState) {
035        super.onCreate(savedInstanceState);
036        setContentView(R.layout.main);
037        mContext = getApplicationContext();
038        show = (Button)findViewById(R.id.show);
039        lv = (ListView)findViewById(R.id.lvperson);
040          
041        initPersonData();
042        adapter = new MyListAdapter(persons);
043        lv.setAdapter(adapter);
044          
045        show.setOnClickListener(new View.OnClickListener() {
046  
047            @Override
048            public void onClick(View v) {
049                  
050                listItemID.clear();
051                for(int i=0;i<adapter.mChecked.size();i++){
052                    if(adapter.mChecked.get(i)){
053                        listItemID.add(i);
054                    }
055                }
056                  
057                if(listItemID.size()==0){
058                    AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);
059                    builder1.setMessage("没有选中任何记录");
060                    builder1.show();
061                }else{
062                    StringBuilder sb = new StringBuilder();
063                      
064                    for(int i=0;i<listItemID.size();i++){
065                        sb.append("ItemID="+listItemID.get(i)+" . ");
066                    }
067                    AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);
068                    builder2.setMessage(sb.toString());
069                    builder2.show();
070                }
071            }
072        });
073    }
074      
075    /**
076     * 模拟数据
077     */
078    private void initPersonData(){
079        Person mPerson;
080        for(int i=1;i<=12;i++){
081            mPerson = new Person();
082            mPerson.setName("Andy"+i);
083            mPerson.setAddress("GuangZhou"+i);
084            persons.add(mPerson);
085        }
086    }
087      
088    //自定义ListView适配器
089    class MyListAdapter extends BaseAdapter{
090        List<Boolean> mChecked;
091        List<Person> listPerson;
092        HashMap<Integer,View> map = new HashMap<Integer,View>(); 
093          
094        public MyListAdapter(List<Person> list){
095            listPerson = new ArrayList<Person>();
096            listPerson = list;
097              
098            mChecked = new ArrayList<Boolean>();
099            for(int i=0;i<list.size();i++){
100                mChecked.add(false);
101            }
102        }
103  
104        @Override
105        public int getCount() {
106            return listPerson.size();
107        }
108  
109        @Override
110        public Object getItem(int position) {
111            return listPerson.get(position);
112        }
113  
114        @Override
115        public long getItemId(int position) {
116            return position;
117        }
118  
119        @Override
120        public View getView(int position, View convertView, ViewGroup parent) {
121            View view;
122            ViewHolder holder = null;
123              
124            if (map.get(position) == null) {
125                Log.e("MainActivity","position1 = "+position);
126                  
127                LayoutInflater mInflater = (LayoutInflater) mContext
128                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
129                view = mInflater.inflate(R.layout.listitem, null);
130                holder = new ViewHolder();
131                holder.selected = (CheckBox)view.findViewById(R.id.list_select);
132                holder.name = (TextView)view.findViewById(R.id.list_name);
133                holder.address = (TextView)view.findViewById(R.id.list_address);
134                final int p = position;
135                map.put(position, view);
136                holder.selected.setOnClickListener(new View.OnClickListener() {
137                      
138                    @Override
139                    public void onClick(View v) {
140                        CheckBox cb = (CheckBox)v;
141                        mChecked.set(p, cb.isChecked());
142                    }
143                });
144                view.setTag(holder);
145            }else{
146                Log.e("MainActivity","position2 = "+position);
147                view = map.get(position);
148                holder = (ViewHolder)view.getTag();
149            }
150              
151            holder.selected.setChecked(mChecked.get(position));
152            holder.name.setText(listPerson.get(position).getName());
153            holder.address.setText(listPerson.get(position).getAddress());
154              
155            return view;
156        }
157          
158    }
159      
160    static class ViewHolder{
161        CheckBox selected;
162        TextView name;
163        TextView address;
164    }
165}

[6] 程序运行后的结果如下:

文章出处:http://blog.csdn.net/cjjky/article/details/6967219

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值