我正在使用自定义的SimpleOnGestureListener来检测长按和单击,我正在我的ListView上实现它,它上面有一个选择器。
现在,当长按列表中的项目时,我正在启动上下文操作模式,之后每次调用singleTapUp时我都会将项目索引添加到一组选定项目中。我还使用了相当简陋的集合实现了切换逻辑。
在切换时,我还检查该索引是否映射到我通过调用得到的稀疏布尔数组中的布尔值
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>
答案 0 :(得分:0)
将子项的根布局作为框架布局,并将其属性设置为
<强>机器人:前景=&#34;机器人:?ATTR / activatedBackgroundIndicator&#34; 强>
那对我来说是f9工作
答案 1 :(得分:0)
好吧,最后经过大量的讨论后,结果是一个糟糕的设计案例,所以我想我会发布答案,万一其他人不小心做错了。
我永远不应该使用SimpleOnGestureListener来检测onSingleTapUp()和onLongPress()这样的基本事件,它们的替代品分别位于AdapterView类中,分别是OnItemClickListener()和OnItemLongClickListener()。
使用这些侦听器,AdapterView可以有效地处理状态,并且不会出现问题。