Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用ChoiceMode multipleChoice在列表视图上设置选择器_Android_Listview_Selector_Gesture_Android Actionmode - Fatal编程技术网

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

Android 使用ChoiceMode multipleChoice在列表视图上设置选择器,android,listview,selector,gesture,android-actionmode,Android,Listview,Selector,Gesture,Android Actionmode,我正在使用一个定制的SimpleOnGestureListener来检测长按和单次点击,我正在我的ListView上实现它,它有一个选择器 现在,当列表中的一个项目被长按时,我将启动一个上下文操作模式,之后每次调用singleTapUp时,我都会将项目索引添加到一组选定的项目中。我还使用非常基本的集合实现了切换逻辑 在切换时,我还检查该索引是否映射到从调用中获得的稀疏布尔数组中的布尔值 getCheckedItemPositions() 在ListView上。如果索引不在所选项目中,我将添加

我正在使用一个定制的SimpleOnGestureListener来检测长按和单次点击,我正在我的ListView上实现它,它有一个选择器

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

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

getCheckedItemPositions() 
在ListView上。如果索引不在所选项目中,我将添加它并调用

listView.setItemChecked(index, true)
listView.setItemChecked(index, false)
否则,我会将其从集合中移除并调用

listView.setItemChecked(index, true)
listView.setItemChecked(index, false)
现在,我的问题是,当长按时启动动作模式回调的第一个项不能保持其激活的背景,而我随后单击的所有项都会保持激活的背景

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

setItemChecked() 
明确地说,然后我必须长按每个项目,以保持激活的背景和单点击项目不会改变背景

有人能帮我找到一个干净的方法来实现我想要的目标吗? 任何帮助都将不胜感激

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


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

android:前台=“?android:attr/activatedBackgroundIndicator”


这对我来说是f9的工作

好吧,最后,在经历了大量的挠头之后,我发现这是一个糟糕的设计,所以我想我会发布答案,以防其他人意外地做了这个错误

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


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

仍然不会更改行为启动操作模式的第一个项目不会保留激活的背景,但在单击之后的后续项目会保留激活的背景。而且,即使我长按每个项目,激活的背景也不会被任何项目保留。