Android项目开发经验小结----ListView的单选模式和多选模式
2015-11-23 09:51
531 查看
最近公司做的一个项目像下面的二级联动功能。
一开始什么都没想,直接就左边RadioGroup右边CheckBox。写完后发现,代码量实在太多了,而且看起来乱糟糟的。
突然想起,ListView的一个xml属性
这个属性可以设置ListView的选择模式。比如单选,多选什么的。
而且这个属性是在ListView的父类AbsListView中的。也就是说,GridView中也有,然后就可以着手实现了。
布局文件。
关键属性android:choiceMode,ListView设置为singleChoice(单选模式),GirdView设置为mutipleChoice(多选模式)
单选模式没什么太多需要注意的地方,跟平时的用法一样。一些关于获取当前选中项目的方法
isItemChecked(intposition)
判断一个item是否被选中
getCheckedItemCount()
获得被选中item的总数
setItemChecked(intposition,booleanvalue)选中一个item
clearChoices()
清除选中的item
getCheckedItemIds()
获取被选中item的id
getCheckedItemPosition()
获取选中的Item位置,只针对单选模式有效
关于多选模式需要注意的一个点。Item中的布局必须要实现Checkable接口
另外,如果布局只有一个TextView的话,可以使用安卓系统提供的一个组件CheckedTextView
简单来说,这个组件就是一个实现了Checkable的一个TextView
关于获取多选模式中的Item
想要获取多选模式中的Item项目,adapter里面就要重写
而且一定要返回true,然后通过getCheckedItemIds()就可以获取到相对应Item的position整形数组
一开始什么都没想,直接就左边RadioGroup右边CheckBox。写完后发现,代码量实在太多了,而且看起来乱糟糟的。
突然想起,ListView的一个xml属性
android:choiceMode="singleChoice"
这个属性可以设置ListView的选择模式。比如单选,多选什么的。
而且这个属性是在ListView的父类AbsListView中的。也就是说,GridView中也有,然后就可以着手实现了。
布局文件。
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/widget_toolbar_main"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ListView
android:background="@color/gray_back"
android:choiceMode="singleChoice"
android:id="@+id/lv_select_sub_and_grade"
android:layout_width="100dp"
android:layout_height="match_parent"/>
<GridView
android:choiceMode="multipleChoice"
android:background="@color/normal_white"
android:numColumns="3"
android:listSelector="@drawable/selector_grid_item_select_sub_grade_bg"
android:verticalSpacing="20dp"
android:padding="10dp"
android:id="@+id/gv_select_sub_and_grade"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</LinearLayout>
关键属性android:choiceMode,ListView设置为singleChoice(单选模式),GirdView设置为mutipleChoice(多选模式)
单选模式没什么太多需要注意的地方,跟平时的用法一样。一些关于获取当前选中项目的方法
isItemChecked(intposition)
判断一个item是否被选中
getCheckedItemCount()
获得被选中item的总数
setItemChecked(intposition,booleanvalue)选中一个item
clearChoices()
清除选中的item
getCheckedItemIds()
获取被选中item的id
getCheckedItemPosition()
获取选中的Item位置,只针对单选模式有效
关于多选模式需要注意的一个点。Item中的布局必须要实现Checkable接口
publicclassMyLinearextendsLinearLayoutimplementsCheckable{
privatebooleanmChecked;
publicMyLinear(Contextcontext){
super(context);
}
@Override
publicvoidsetChecked(booleanchecked){
mChecked=checked;
setBackgroundColor(mChecked?getResources().getColor(R.color.blue_white):getResources().getColor(R.color.dark_blue));
}
@Override
publicbooleanisChecked(){
returnmChecked;
}
@Override
publicvoidtoggle(){
setChecked(mChecked);
}
}
另外,如果布局只有一个TextView的话,可以使用安卓系统提供的一个组件CheckedTextView
简单来说,这个组件就是一个实现了Checkable的一个TextView
关于获取多选模式中的Item
想要获取多选模式中的Item项目,adapter里面就要重写
publicbooleanhasStableIds(){
returntrue;
}
而且一定要返回true,然后通过getCheckedItemIds()就可以获取到相对应Item的position整形数组
相关文章推荐
- Android AutoLayout全新的适配方式 堪称适配终结者
- Android写文件到SDCard
- android截屏
- Android中延迟加载的问题
- 关于Android的横竖屏设置
- Android FileUtil(android文件工具类)
- Android手机推送方案
- Mono for Android 优势与劣势
- Android广播机制概述
- Android——活动的生命周期与启动模式
- Android Studio 删除行的快捷键
- Android布局优化
- 从零学Android(十一)、ActionBar基础知识
- android下hci log
- Android计时器 android.widget.Chronometer
- Android AutoLayout全新的适配方式 堪称适配终结者
- 加速Android打开时间
- Android编程加密算法小结(AES、Base64、RAS加密算法)
- Android 5.0 API新增和改进
- Android studio升级导致原有工程出错的解决方法