zoukankan      html  css  js  c++  java
  • Android中ListView结合CheckBox判断选中项

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

    [1] 程序结构图如下:

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

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

    [html] view plaincopy
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout  
    3.   xmlns:android="http://schemas.android.com/apk/res/android"  
    4.   android:orientation="vertical"  
    5.   android:layout_width="fill_parent"  
    6.   android:layout_height="fill_parent">  
    7.   <LinearLayout  
    8.      android:layout_width="fill_parent"  
    9.      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布局文件源码如下:

    [html] view plaincopy
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent">  
    6.     <Button  
    7.        android:id="@+id/show"  
    8.        android:layout_width="fill_parent"  
    9.        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实体类源码如下:

    [html] view plaincopy
     
    1. package com.andyidea.bean;  
    2.   
    3. public class Person {  
    4.   
    5.     private String name;  
    6.     private String address;  
    7.       
    8.     public String getName() {  
    9.         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类源码如下:

    [html] view plaincopy
     
    1. package com.andyidea.listview;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.HashMap;  
    5. import java.util.List;  
    6.   
    7. import com.andyidea.bean.Person;  
    8.   
    9. import android.app.Activity;  
    10. import android.app.AlertDialog;  
    11. import android.content.Context;  
    12. import android.os.Bundle;  
    13. import android.util.Log;  
    14. import android.view.LayoutInflater;  
    15. import android.view.View;  
    16. import android.view.ViewGroup;  
    17. import android.widget.BaseAdapter;  
    18. import android.widget.Button;  
    19. import android.widget.CheckBox;  
    20. import android.widget.ListView;  
    21. import android.widget.TextView;  
    22.   
    23. public class MainActivity extends Activity {  
    24.       
    25.     Button show;  
    26.     ListView lv;  
    27.     List<Personpersons = new ArrayList<Person>();  
    28.     Context mContext;  
    29.     MyListAdapter adapter;  
    30.     List<IntegerlistItemID = new ArrayList<Integer>();  
    31.       
    32.     /** Called when the activity is first created. */  
    33.     @Override  
    34.     public void onCreate(Bundle savedInstanceState) {  
    35.         super.onCreate(savedInstanceState);  
    36.         setContentView(R.layout.main);  
    37.         mContext = getApplicationContext();  
    38.         show = (Button)findViewById(R.id.show);  
    39.         lv = (ListView)findViewById(R.id.lvperson);  
    40.           
    41.         initPersonData();  
    42.         adapter = new MyListAdapter(persons);  
    43.         lv.setAdapter(adapter);  
    44.           
    45.         show.setOnClickListener(new View.OnClickListener() {  
    46.   
    47.             @Override  
    48.             public void onClick(View v) {  
    49.                   
    50.                 listItemID.clear();  
    51.                 for(int i=0;i<adapter.mChecked.size();i++){  
    52.                     if(adapter.mChecked.get(i)){  
    53.                         listItemID.add(i);  
    54.                     }  
    55.                 }  
    56.                   
    57.                 if(listItemID.size()==0){  
    58.                     AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);  
    59.                     builder1.setMessage("没有选中任何记录");  
    60.                     builder1.show();  
    61.                 }else{  
    62.                     StringBuilder sb = new StringBuilder();  
    63.                       
    64.                     for(int i=0;i<listItemID.size();i++){  
    65.                         sb.append("ItemID="+listItemID.get(i)+" . ");  
    66.                     }  
    67.                     AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this);  
    68.                     builder2.setMessage(sb.toString());  
    69.                     builder2.show();  
    70.                 }  
    71.             }  
    72.         });  
    73.     }  
    74.       
    75.     /**  
    76.      * 模拟数据  
    77.      */  
    78.     private void initPersonData(){  
    79.         Person mPerson;  
    80.         for(int i=1;i<=12;i++){  
    81.             mPerson = new Person();  
    82.             mPerson.setName("Andy"+i);  
    83.             mPerson.setAddress("GuangZhou"+i);  
    84.             persons.add(mPerson);  
    85.         }  
    86.     }  
    87.       
    88.     //自定义ListView适配器  
    89.     class MyListAdapter extends BaseAdapter{  
    90.         List<Boolean> mChecked;  
    91.         List<Person> listPerson;  
    92.         HashMap<Integer,Viewmap = new HashMap<Integer,View>();   
    93.           
    94.         public MyListAdapter(List<Person> list){  
    95.             listPerson = new ArrayList<Person>();  
    96.             listPerson = list;  
    97.               
    98.             mChecked = new ArrayList<Boolean>();  
    99.             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

  • 相关阅读:
    安装oracle11g 并且开启APEX 安装
    爬虫基础
    深度优先广度优先
    部署静态页面到nginx
    Nginx 实现端口转发
    五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
    Please select Android SDK解决办法
    android与JS交互,互相调用方法,跳转到网页
    Android:你要的WebView与 JS 交互方式 都在这里了
    Android与js交互拍照上传资料
  • 原文地址:https://www.cnblogs.com/cmblogs/p/4347892.html
Copyright © 2011-2022 走看看