码迷,mamicode.com
首页 > 其他好文 > 详细

ListView 实现多选/单选

时间:2015-12-13 17:15:13      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

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 实现多选/单选

标签:

原文地址:http://www.cnblogs.com/misybing/p/5042841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!