打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
(Android)五分钟让你轻松学会ListView单选和多选功能
userphoto

2022.08.02 广东

关注

在实现ListView单选时,我们可以在

Adapter中自己创建一个selectPosition参数,

这样是能实现需求。

但加入要是再加一个多选
接着又在Adapter中创建了一个记录选中position的集合,也是可以实现的,但是实现起来还是相关繁琐的。过程很不乐观。

这里介绍一种相对简单的实现方式。

关键点,利用ListView中的Choice来实现。

ListView中自带Choice相关功能,提供单选和多选两种Choice模式。

我们可以在布局中设置

android:choiceMode = "singleChoice"

同样也可以在代码中处理

lv .setChoiceMode(ListView. CHOICE_MODE_MULTIPLE);

对于api很好理解,顾名思义。我们来看一下
比如 getCheckedItemPosition()就是获取当前选中的位置, 注意只有单选模式此方法才有意义
而多选对应的获取方法为 getCheckedItemPositions 返回的是一个SparseBooleanArray对象
这个类型相当于map,是一个key为Integer,value为Boolean的键值对集合,代表激活item选中位置和状态数据
有点需要注意的是不代表你10个item获取到的SparseBooleanArray就一定也是size为10, 他只保存激活的item,
激活是指有过点击操作有过checked变化的
比如你点击了两次第二个item,虽然最后第二个item还是未选中状态,
但有了操作,集合中就会保存了一个 1=false 的键值对数据,代表第二个item当前是未选中,而其他位置的item则不保存

我们来看一下效果图:

单选:


多选:


我们重点来看

在于ListView的item布局的处理
被选中的item会设置一个checked状态, 因此这里需要Item的根布局实现过Checkable可选中接口,自定义CheckableLinearLayout 继承于LinearLayout

public class CheckableLinearLayout extends LinearLayout implements Checkable {

// checked状态

private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };

// 是否选中

private boolean mChecked = false;

public CheckableLinearLayout(Context context, AttributeSet attrs) {

super(context, attrs);

}

/**

* 判断是否选中

*/

public boolean isChecked() {

return mChecked;

}

/**

* 设置选中状态

*/

public void setChecked(boolean b) {

if (b != mChecked) {

mChecked = b;

refreshDrawableState();

}

}

/**

* 切换当前的选中状态

*/

public void toggle() {

setChecked(!mChecked);

}

@Override

public int[] onCreateDrawableState(int extraSpace) {

// 在原有状态中添加一个空间space用于保存checked状态

final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);

if (isChecked()) {

// 将checked状态合并到原有的状态数组中

mergeDrawableStates(drawableState, CHECKED_STATE_SET);

}

return drawableState;

}

}

多选关键代码:


如果你觉得看代码过于繁琐,想整理看一下demo运行效果

源码下载地址: http://pan.baidu.com/s/1gdRZ02J

提取密码: sw8i

开发环境:Eclipse

爱开发

微信号:aikaifa

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# ListView 选中状态的判断方法
Android笔记之:在ScrollView中嵌套ListView的方法
android ListView各种效果实现总结,持续更新...
使用ListView应该注意的地方
分开adapter的getView方法代码,写出个清爽的adapter
Android样式的开发:selector篇
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服