使用 ChoiceMode multipleChoice 在列表视图上设置选择器
Setting selector on List View with ChoiceMode multipleChoice
我正在使用自定义 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>
将子项目的根布局作为框架布局并将其属性设置为
android:foreground="?android:attr/activatedBackgroundIndicator"
这对我来说很有效
好吧,经过大量的摸索,最终证明是一个糟糕的设计案例,所以我想我会post答案,以防其他人不小心做错了。
我不应该使用 SimpleOnGestureListener 来检测诸如 onSingleTapUp() 和 onLongPress() 之类的基本事件,它们的替代方法可以在 AdapterView class 中找到,它们分别是 OnItemClickListener() 和 OnItemLongClickListener()。
使用这些侦听器,AdapterView 可以有效地处理状态,问题永远不会出现。
我正在使用自定义 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>
将子项目的根布局作为框架布局并将其属性设置为
android:foreground="?android:attr/activatedBackgroundIndicator"
这对我来说很有效
好吧,经过大量的摸索,最终证明是一个糟糕的设计案例,所以我想我会post答案,以防其他人不小心做错了。
我不应该使用 SimpleOnGestureListener 来检测诸如 onSingleTapUp() 和 onLongPress() 之类的基本事件,它们的替代方法可以在 AdapterView class 中找到,它们分别是 OnItemClickListener() 和 OnItemLongClickListener()。
使用这些侦听器,AdapterView 可以有效地处理状态,问题永远不会出现。