千家信息网

Android中如何实现ListView多选模式

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇"Android中如何实现ListView多选模式"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们
千家信息网最后更新 2026年10月31日Android中如何实现ListView多选模式

这篇"Android中如何实现ListView多选模式"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Android中如何实现ListView多选模式"文章吧。

ListView使用多选模式好处

交互与数据分离,在多选状态下不需要修改数据源,在最后确定的时候获取选择索引来确定选择的数据。

ListView模式

  • CHOICE_MODE_NONE:普通模式;

  • CHOICE_MODE_SINGLE:单选模式;

  • CHOICE_MODE_MULTIPLE:多选模式;

  • CHOICE_MODE_MULTIPLE_MODAL:多选模式(与ActionMode配合使用)。

CHOICE_MODE_MULTIPLE 与 CHOICE_MODE_MULTIPLE_MODAL 区别:
前者能够同时响应ListView Item点击事件,与Item选择事件;
后者在未进入ActionMode模式下响应Item点击事件,不响应Item选择事件。在进入ActionMode模式后不响应Item点击事件,响应Item选择事件。
同时后者如果Item长按能够自动进入到ActionMode模式(也可以使用 ListView.setItemChecked(0,true)来选择一项Item进入ActionMode模式),当所有Item全部取消选择后,自动退出ActionMode模式。
CHOICE_MODE_MULTIPLE_MODAL使用方式:

listView = (ListView) findViewById(R.id.list_view);listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);listView.setMultiChoiceModeListener(new ListView.MultiChoiceModeListener());

设置方式

  1. XML布局文件设置(多选模式设置):

  2. 代码设置:
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

选择

ListView多选状态是记录到ListView控件中,由其父类AbsListView实现。
列表Item最外层需要实现Checkable接口,比如CheckBox、CheckedTextView等控件。
如果需要使用容器类控件比如LinearLayout,可以重写控件,实现Checkable接口。
比如:

public class CheckableLinearLayout extends LinearLayout implements Checkable {    private boolean mChecked = false;    public CheckableLinearLayout(Context context) {        super(context);    }    public CheckableLinearLayout(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);    }    public CheckableLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    public void toggle() {        setChecked(!mChecked);    }    @Override    public boolean isChecked() {        return mChecked;    }    @Override    public void setChecked(boolean checked) {        if (mChecked != checked) {            mChecked = checked;            refreshDrawableState();            for (int i = 0, len = getChildCount(); i < len; i++) {                View child = getChildAt(i);                if(child instanceof Checkable){                    ((Checkable) child).setChecked(checked);                }            }        }    }}

获取选择数据

获取到最终选择结果为选中项索引集合,是一个SparseBooleanArray,记录了操作过的item选择状态(如果选中item再取消同样会记录,状态为false)。
SparseBooleanArray checkedItemPositions = listView.getCheckedItemPositions();

API

// 清除选中
public void clearChoices();
// 根据索引判断是否选中
public boolean isItemChecked(int position);
// 获取选中数量
public int getCheckedItemCount();
// 根据索引设置选中状态
public void setItemChecked(int position, boolean value);

注意

  • 如果ListView Item内有按钮会抢Item点击事件,解决方法为在Item根布局增加
    android:descendantFocusability="blocksDescendants"

  • ActionMode监听回调有两种ActionMode.Callback和MultiChoiceModeListener,后者继承自前者,并新增一个item选择与取消选择的回调方法,但是此方法只在CHOICE_MODE_MULTIPLE_MODAL模式下有效,所以MultiChoiceModeListener监听只适用于CHOICE_MODE_MULTIPLE_MODAL模式。

  • ListView如果使用CHOICE_MODE_MULTIPLE_MODAL模式,可以自动进入ActionMode模式,使用setMultiChoiceModeListener(MultiChoiceModeListener listener)设置监听回调。

以上就是关于"Android中如何实现ListView多选模式"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

模式 选择 事件 内容 状态 控件 数据 索引 监听 同时 布局 接口 文章 方式 方法 知识 篇文章 普通 有效 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 互联网巨头反垄断金融科技 互联网下的科技发展 朗新科技与工业互联网 远拓互联网科技 长亮科技互联网金融 成都狮子座互联网科技 互联网科技素材视频竖屏 华脉科技工业互联网产品 银川新华互联网科技学校地址 青岛中康互联网医疗科技有限公司 顶级互联网科技成果有哪些 电子商务与互联网科技的关系 互联网营销推广黑科技 广州燕处互联网科技有限公司 互联网时代科技型公司的机会 长沙渺峰互联网科技有限公司 北京互联网科技类企业分布 互联网科技职业技能培训学校 现代科技的标志之一的互联网 互联网科技工作委员会副主任毛军 互联网未来科技 互联网科技创新服务 互联网科技大奖都有哪些公司 为客找房互联网科技公司怎么样 华中科技大学互联网的牛人 电子商务与互联网科技的关系 富国互联网金融科技混合基金 科技和互联网行业的特点 如何强化互联网金融科技
0