Android开发之ListView,加入CheckBox(复选框),实现选择列表

http://blog.csdn.net/ahutzh/article/details/6911095

Android ListView没行加入CheckBox,实现选择列表,既可点击复选框进行选中,也可以点击list一行进行选中,效果图如下:

下面贴下主要代码的实现:

对于列表中复选框,我们需要在复选框的状态发生变化时,保存复选框的状态,不然在拖动列表过程中,会丢失复选框的状态。

在这里我们采用下面方式保存:

[java] view
plain
copy

  1. public class Person implements Serializable{  
  2.   
  3.     /** 
  4.      *  
  5.      */  
  6.     private static final long serialVersionUID = 1L;  
  7.       
  8.     private String userCode;  
  9.     private String userName;  
  10.     private boolean checked;    //保存复选框的状态  

此对象保存的数据对象列表中的每一列。

实现ListView的Adapter类代码如下:

[java] view
plain
copy

  1. /** 
  2.  *  
  3.  * <dl> 
  4.  * <dt>DispatchSelectUserAdapter.java</dt> 
  5.  * <dd>Description: 选择用户界面Adapter类</dd> 
  6.  * <dd>Copyright: Copyright (C) 2011</dd> 
  7.  * <dd>CreateDate: 2011-10-26</dd> 
  8.  * </dl> 
  9.  *  
  10.  * @author ZhanHua 
  11.  */  
  12. public class DispatchSelectUserAdapter extends BaseAdapter {  
  13.   
  14.     private Context mContext;  
  15.     private List<Person> mPersonList;  
  16.     private int mResource;  
  17.     private LayoutInflater mInflater;  
  18.   
  19.     public DispatchSelectUserAdapter(Context context, List<Person> personList,  
  20.             int resource) {  
  21.         mContext = context;  
  22.         mPersonList = personList;  
  23.         mResource = resource;  
  24.         mInflater = LayoutInflater.from(mContext);  
  25.     }  
  26.   
  27.     @Override  
  28.     public int getCount() {  
  29.         return mPersonList.size();  
  30.     }  
  31.   
  32.     @Override  
  33.     public Object getItem(int position) {  
  34.         return mPersonList.get(position);  
  35.     }  
  36.   
  37.     @Override  
  38.     public long getItemId(int position) {  
  39.         return position;  
  40.     }  
  41.   
  42.     @Override  
  43.     public View getView(final int position, View convertView, ViewGroup parent) {  
  44.         if (convertView == null) {  
  45.             convertView = mInflater.inflate(mResource, parent, false);  
  46.         }  
  47.         TextView tvUserName = (TextView) convertView.findViewById(  
  48.                 R.id.dispatch_item_select_user_name);  
  49.         final CheckBox ckbItem = (CheckBox) convertView.findViewById(  
  50.                 R.id.dispatch_item_select_user_ckb);  
  51.         Person person = mPersonList.get(position);  
  52.         tvUserName.setText(person.getUserName());  
  53.         System.out.println(person.getUserName());  
  54.         ckbItem.setChecked(person.isChecked());  
  55.         ckbItem.setOnClickListener(new View.OnClickListener() {  
  56.               
  57.             @Override  
  58.             public void onClick(View v) {  
  59.                 mPersonList.get(position).setChecked(ckbItem.isChecked());//保存checkbox状态至位置对应的列表对象Person中  
  60.                   
  61.             }  
  62.         });  
  63.         person = null;  
  64.         return convertView;  
  65.     }  
  66.   
  67. }  

在主界面初始化数据:

[java] view
plain
copy

  1. /** 
  2.      *  
  3.      * Desc:初始化列表数据 
  4.      * @param personList 
  5.      */  
  6.     private void initListData(List<Person> personList) {  
  7.         DispatchSelectUserAdapter adapter = new DispatchSelectUserAdapter(  
  8.                 DispatchSelectUserActivity.this, personList,  
  9.                 R.layout.dispatch_select_user_item);  
  10.         getListView().setAdapter(adapter);  
  11.   
  12.     }  

ListView中列表点击事件:

[java] view
plain
copy

  1. /** 
  2.      * 列表点击 
  3.      */  
  4.     @Override  
  5.     protected void onListItemClick(ListView l, View v, int position, long id) {  
  6.         super.onListItemClick(l, v, position, id);  
  7.         CheckBox checkbox = (CheckBox) v.findViewById(R.id.dispatch_item_select_user_ckb);  
  8.         checkbox.setChecked(!checkbox.isChecked());  
  9.         mPersonList.get(position).setChecked(checkbox.isChecked());  
  10.     }  

下面贴下界面设计的XML代码:

主界面的xml:

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:orientation="vertical"  
  5.   android:background="@drawable/common_background"  
  6.   android:layout_width="fill_parent"  
  7.   android:layout_height="fill_parent">  
  8.             <include android:id="@+id/dispatch_select_user_title"   
  9.             layout="@layout/common_title"   
  10.             android:layout_alignParentTop="true"/>  
  11.             <LinearLayout   
  12.                 android:id="@+id/section_title_layout"  
  13.                 android:background="@drawable/bg_sencend_title"  
  14.                 android:orientation="horizontal"  
  15.                 android:layout_width="fill_parent"  
  16.                 android:layout_height="28dip" android:weightSum="10"  
  17.                 android:layout_below="@id/dispatch_select_user_title">  
  18.                 <TextView   
  19.                     android:id="@+id/dispatch_section_user_name"   
  20.                     android:layout_marginLeft="10dip"  
  21.                     android:text="@string/dispatch_section_user_name"  
  22.                     android:layout_weight="2"  
  23.                     android:layout_width="fill_parent"  
  24.                     android:layout_height="fill_parent"   
  25.                     android:textColor="@drawable/color_black"  
  26.                     android:clickable="false" android:enabled="false" android:gravity="center_vertical">  
  27.                     </TextView>  
  28.                     <LinearLayout   
  29.                         android:id="@+id/dispatch_lineLayout02"  
  30.                         android:background="#6d6d6e"  
  31.                         android:layout_width="1dip"  
  32.                         android:layout_height="fill_parent"  
  33.                     ></LinearLayout>  
  34.                 <TextView   
  35.                     android:id="@+id/dispatch_section_select"   
  36.                     android:text="@string/dispatch_section_select"  
  37.                     android:layout_weight="8"  
  38.                     android:gravity="center"  
  39.                     android:layout_width="fill_parent"   
  40.                     android:layout_height="fill_parent"  
  41.                     android:textColor="@drawable/color_black"  
  42.                     android:background="@drawable/bg_sencend_title" android:clickable="false" android:enabled="false">  
  43.                     </TextView>  
  44.                 </LinearLayout>  
  45.             <LinearLayout   
  46.                 android:layout_width="fill_parent"  
  47.                 android:layout_height="fill_parent"  
  48.                 android:layout_below="@id/section_title_layout">  
  49.                 <ListView   
  50.                     android:id="@+id/android:list"  
  51.                     android:layout_height="wrap_content"  
  52.                     android:cacheColorHint="#00000000"  
  53.                     android:layout_width="fill_parent"></ListView>  
  54.             </LinearLayout>  
  55. </RelativeLayout>  

ListView中单个Item的xml:

[html] view
plain
copy

  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:gravity="center"  
  9.                 android:orientation="horizontal"  
  10.                 android:layout_width="fill_parent"  
  11.                 android:layout_height="40dip" android:weightSum="10">  
  12.                 <TextView   
  13.                     android:id="@+id/dispatch_item_select_user_name"  
  14.                     android:textColor="#000000"  
  15.                     android:layout_marginLeft="10dip"  
  16.                     android:layout_weight="2"   
  17.                     android:layout_width="fill_parent"   
  18.                     android:layout_height="wrap_content"  
  19.                     >  
  20.                     </TextView>  
  21.                 <LinearLayout   
  22.                     android:gravity="center"  
  23.                     android:layout_width="fill_parent"   
  24.                     android:layout_weight="8"   
  25.                     android:layout_height="wrap_content">  
  26.                     <CheckBox   
  27.                     style="@style/CustomCheckBox"  
  28.                     android:id="@+id/dispatch_item_select_user_ckb"   
  29.                     android:focusable="false"  
  30.                     android:layout_width="wrap_content"   
  31.                     android:layout_height="wrap_content">  
  32.                     </CheckBox>  
  33.                 </LinearLayout>  
  34.     </LinearLayout>  
  35. </LinearLayout>  

这样就可以实现上图中的选择列表效果了,也可以在title区域添加全选复选框,点击后,实现全选效果。

时间: 2024-11-08 19:24:24

Android开发之ListView,加入CheckBox(复选框),实现选择列表的相关文章

checkbox-如何监听listview中CheckBox复选框并且进行实时控制

问题描述 如何监听listview中CheckBox复选框并且进行实时控制 如何监听listview中CheckBox复选框并且进行实时控制 解决方案 如果你用的是C#,listview有itemcheck事件 解决方案二: 用ItemCheck或者ItemChecked事件.区别是后者在之后发生. 解决方案三: http://blog.csdn.net/codeeer/article/details/6732040

android checkbox复选框不显示

问题描述 android checkbox复选框不显示 做了一个显示文件列表的app 列表每一项右边的checkbox复选框在安卓5.0系统中显示出来了 把app装到4.0+的系统中就不显示了 一直都找不到原因 麻烦各位大神解救 在4.0+的系统中右边的复选框不显示 但点击了代码提示还是又选中了 它还是在那个位置 但就是显示不出来 解决方案 Android中CheckBox复选框操作android 中 CheckBox 复选框操作Android复选框(CheckBox)的现实

Android开发之ListView实现Item局部刷新_Android

对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView.在这种模式下,我们会在getView中,根据不同的数据源,让控件显示不同的内容.这种模式是最常见的刷新模式,当我们来回滑动ListView的时候,调用adapter的getView方法,然后listview对adapter返回的View进行绘制.这种模式下,View的显示内容或状态都记录在adapter里面

Android开发之ListView列表刷新和加载更多实现方法_Android

本文实例讲述了Android开发之ListView列表刷新和加载更多实现方法.分享给大家供大家参考.具体如下: 上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import andro

Android开发之ListView的head消失页面导航栏的渐变出现和隐藏_Android

1.Fragment页面xml布局: <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"

Android中CheckBox复选框控件使用方法详解

CheckBox复选框控件使用方法,具体内容如下 一.简介 1. 2.类结构图 二.CheckBox复选框控件使用方法 这里是使用java代码在LinearLayout里面添加控件 1.新建LinearLayout布局 2.建立CheckBox的XML的Layout文件 3.通过View.inflate()方法创建CheckBox CheckBox checkBox=(CheckBox) View.inflate(this, R.layout.checkbox, null); 4.通过Linea

android开发之listView组件用法实例简析

本文实例讲述了android开发之listView组件用法.分享给大家供大家参考,具体如下: 关于Android ListView组件中android:drawSelectorOnTop含义 android:drawSelectorOnTop="true"  点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到. android:drawSelectorOnTop="false" 点击某条记录不放,颜色会在记录的后面,成为背景色,但

Android开发之ListView实现Item局部刷新

对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView.在这种模式下,我们会在getView中,根据不同的数据源,让控件显示不同的内容.这种模式是最常见的刷新模式,当我们来回滑动ListView的时候,调用adapter的getView方法,然后listview对adapter返回的View进行绘制.这种模式下,View的显示内容或状态都记录在adapter里面

Android开发之ListView列表刷新和加载更多实现方法

本文实例讲述了Android开发之ListView列表刷新和加载更多实现方法.分享给大家供大家参考.具体如下: 上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import andro

Android开发之ListView的head消失页面导航栏的渐变出现和隐藏

1.Fragment页面xml布局: <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"