繁体   English   中英

使用ChoiceMode multipleChoice在列表视图上设置选择器

[英]Setting selector on List View with ChoiceMode multipleChoice

我正在使用自定义的SimpleOnGestureListener来检测长按和轻按,然后在具有选择器的ListView上实现它。

现在,当长按列表中的一个项目时,我将启动一个上下文操作模式,然后在每次调用singleTapUp之后,我都会将该项目索引添加到一组选定的项目中。 我还使用非常基本的set实现了切换逻辑。

切换时,我还要检查该索引是否映射到从调用得到的稀疏布尔数组中的布尔值

getCheckedItemPositions() 

在ListView上。 如果索引不在选定的项目中,我将其添加并调用

listView.setItemChecked(index, true)

否则我将其从集合中删除并致电

listView.setItemChecked(index, false)

现在,我的问题是长按时不会启动其激活背景的第一个启动动作模式回调的项目,而在此之后我单击的所有后续项目都会启动。

我还观察到如果我不打电话

setItemChecked() 

明确地,那么我必须长按每个项目以保留激活的背景,单击项目不会更改背景。

有人可以帮助我找出一种干净的方法来完成我想要实现的目标吗? 任何帮助都感激不尽。

这是我正在使用的选择器--->

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:state_activated="true"
        android:drawable="@drawable/blue_highlight"/>

    <item android:state_activated="false"
        android:drawable="@drawable/plank_idle"/>

</selector>

将子项的根布局作为框架布局,并将其属性设置为

机器人:前景= “机器人:ATTR / activatedBackgroundIndicator”

多数民众赞成在为我工作

好的,最后,经过大量的头部抓挠,结果证明是设计不良的情况,因此,我认为我会发布答案,以防万一其他人意外做错了此事。

我从不应该使用SimpleOnGestureListener来检测诸如onSingleTapUp()和onLongPress()之类的基本事件,它们在AdapterView类中的替代项分别是OnItemClickListener()和OnItemLongClickListener()。

使用这些侦听器,可以通过AdapterView有效地处理状态,并且永远不会出现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM