http://blog.csdn.net/ljfbest/article/details/40685327

ListView自身带了单选、多选模式,可通过listview.setChoiceMode来设置:

listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//开启多选模式
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//开启单选模式
listview.setChoiceMode(ListView.CHOICE_MODE_NONE);//默认模式
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);//没用过,不知道用来干嘛的
实现单选
    需要设置:listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    ListView控件还需要指定一个selector: android:listSelector="@drawable/checkable_item_selector"
  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  2. <item android:drawable="@color/c1" android:state_pressed="true"/>
  3. <item android:drawable="@color/c1" android:state_checked="true"/>
  4. <item android:drawable="@color/c2"/>
  5. </selector>

但是单选选中时的颜色还是系统选中的颜色,而不是自己设定的c1,不知道为什么?

实现多选
    设置:listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    需要对每个item的view实现Checkable接口,以下是LinearLayout实现Checkable接口:
  1. public class CheckableLinearLayout extends LinearLayout implements Checkable {
  2. private boolean mChecked;
  3. public CheckableLinearLayout(Context context, AttributeSet attrs) {
  4. super(context, attrs);
  5. }
  6. @Override
  7. public void setChecked(boolean checked) {
  8. mChecked = checked;
  9. setBackgroundDrawable(checked ? new ColorDrawable(0xff0000a0) : null);//当选中时呈现蓝色
  10. }
  11. @Override
  12. public boolean isChecked() {
  13. return mChecked;
  14. }
  15. @Override
  16. public void toggle() {
  17. setChecked(!mChecked);
  18. }
  19. }
如下使用:
  1. <com.ljfbest.temp.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content">
  4. <TextView
  5. android:id="@+id/tv"
  6. android:layout_width="match_parent"
  7. android:layout_height="wrap_content"
  8. android:gravity="center_vertical"
  9. android:minHeight="?android:attr/listPreferredItemHeightSmall"
  10. android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
  11. android:paddingStart="?android:attr/listPreferredItemPaddingStart"
  12. android:textAppearance="?android:attr/textAppearanceListItemSmall" />
  13. </com.ljfbest.temp.CheckableLinearLayout>
以下附上demo图:

                                   

以下是几个获取/设置 选中条目信息的API:
listview.getCheckedItemCount();//获取选中行数:对CHOICE_MODE_NONE无效
listview.getCheckedItemPosition();//获取选中的某行,只针对单选模式有效,返回int
listview.getCheckedItemIds();//
获取选中条目的ids,是long[]类型,注意需要adapter的hasStableIds()返回true,并且这些id是adapter的
getItemId(int position)返回的.demo中有演示

listview.setItemChecked(position, value);//设置某行的状态

ListView 实现多选/单选的更多相关文章

  1. ListView 实现多选/无线电

    ListView本身与无线电.多选模式.由listview.setChoiceMode设置: listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE) ...

  2. vue开发购物车,解决全选单选问题

    实现全选单选,在vue中无法通过this获取input中的checkbox的checked属性,但是可以通过vue对input的特殊方式v-model来实现对应数据的绑定,同样也可以通过这种方式实现购 ...

  3. Android在listview添加checkbox实现单选多选操作问题(转)

    转自:http://yangshen998.iteye.com/blog/1310183 在Android某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作.表面上 ...

  4. Android在listview添加checkbox实现单选多选操作问题

    android根据View的不同状态更换不同的背景http://www.eoeandroid.com/thread-198029-1-1.html android 模仿朋友网推出的菜单效果[改进版]h ...

  5. 完美解决Android在listview添加checkbox实现单选多选操作问题

    在Android某些开发需求当中,有时候需要在listveiw中加入checkbox实现单选,多选操作.表面上看上去只是改变checkbox那么简单,然而实际开发中,实现起来并不是那么得心应手.尤其当 ...

  6. Android 带checkbox的listView 实现多选,全选,反选,删除

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  7. Android 带checkbox的listView 实现多选,全选,反选

    由于listview的一些特性,刚开始写这种需求的功能的时候都会碰到一些问题,重点就是存储每个checkbox的状态值,在这里分享出了完美解决方法:     布局文件: [html]   <?x ...

  8. bootstrap 列表 表格 表单 复选 单选 多选 输入框组

    一.列表 ul li 二.表格 table  (http://www.runoob.com/bootstrap/bootstrap-tables.html) 1. 基本表格 <table cla ...

  9. 邮箱性质--全选单选的操作和传值 用属性的name传值

    封装类 using System; using System.Collections.Generic; using System.Web; /// <summary> /// Ha 的摘要 ...

随机推荐

  1. (转载)一句简单命令重启nginx - [nginx]

    (转载)http://iambin.blogbus.com/logs/62429223.html 经常需要重启nginx,但网上的很多教程都需要繁琐的启动脚本,远不如apache的重启命令那么简单.  ...

  2. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.5

    Show that matrices with distinct eigenvalues are dense in the space of all $n\times n$ matrices. (Us ...

  3. linux下passwd命令设置修改用户密码

    1.passwd 简单说明: 我们已经学会如何添加用户了,所以我们还要学习设置或修改用户的密码:passwd命令的用法也很多,我们只选如下的几个参数加以说明:想了解更多,请参考man passwd或p ...

  4. VS2010+WINDBG+VMWARE9.0和fatal error RC1106: invalid option: -ologo错误

    提供属性配置文件一份: http://pan.baidu.com/s/1iS1Ix <?xml version="1.0" encoding="utf-8" ...

  5. nyoj重建二叉树(不真的建立)

      感觉c++很陌生啊 题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!). 输入 输入有多组数据(少于100组),以文件结尾结束.每组数据仅一行,包括两个字符串,中间用 ...

  6. NOIP2001 数的划分

    题二 数的划分(20分) 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问 ...

  7. Android Studio 导入项目错误

    Gradle DSL method not found: 'Android()' 错误原因: android studio 引进项目时,自动查找本机是否有项目设置的SDK版本,若发现没有,我们会在pr ...

  8. Tutorial: Getting Started with SignalR (C#) -摘自网络

    Overview This tutorial introduces SignalR development by showing how to build a simple browser-based ...

  9. 如何生成一副Poker

    import java.util.LinkedList;import java.util.Random;//扑克类class Poker{    String color;//花色    String ...

  10. 对XML和YAML文件实现I/O操作

    1.文件的打开关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "I.xml"; FileStora ...