如何使用选择器在长按时“永久”突出显示 ListView 行,但在正常按下时短暂显示
Posted
技术标签:
【中文标题】如何使用选择器在长按时“永久”突出显示 ListView 行,但在正常按下时短暂显示【英文标题】:How to use a selector to highlight a ListView row 'permanently' on long press, but briefly on normal press 【发布时间】:2015-02-16 12:36:09 【问题描述】:我有一个 ListFragment,它的 ListView 设置为 ListView.CHOICE_MODE_SINGLE。适配器返回一个自定义行布局,我将每个行布局的背景设置为一个选择器。
但我似乎无法定义选择器,以便在长按时,该行保持突出显示,但在正常按下时,它只是短暂突出显示。
这是我的选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@color/light_blue" />
<item android:drawable="@android:color/transparent" />
</selector>
该行在长按时保持突出显示,但正常按下也会使该行保持突出显示。我尝试在每个项目中使用各种属性组合,但无法正确使用。
澄清:我仍然希望这样当按下另一行时,先前长按(并突出显示)的行变为未突出显示。上面的选择器确实做到了。
【问题讨论】:
哦,天哪,如果这确实是您想要采取的方法,您将不得不创建一些客户状态。如果您的项目在wasLongPressed
列表中,您最好将长按的项目存储在列表中,并在适配器getView
中设置不同的背景。
所以你认为这不可能在选择器中定义?
有可能。定义它们可能会让人头疼。
使用CHOICE_MODE_NONE
进行正常操作。当用户长按一行时,切换到CHOICE_MODE_MULTIPLE_MODAL
并显示您的操作模式(或其他)。然后,当用户关闭操作模式(或其他)时,切换回CHOICE_MODE_NONE
。有关此示例,请参阅 github.com/commonsguy/cw-omnibus/tree/master/ActionMode/…。
好的,让我试试这些建议和下面的答案,我会报告的。
【参考方案1】:
如果您想使用状态,请查看 android 定义的默认状态以确保还没有。如果 android 没有适合您需求的状态,请在此处查看定义自定义状态 How to add a custom button state
如果您不想这样做,您可以随时将选择添加到列表中,并根据我的评论提示更改 getView
中的背景。
【讨论】:
以上是关于如何使用选择器在长按时“永久”突出显示 ListView 行,但在正常按下时短暂显示的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Java 自定义单元格渲染器在选择行/单元格时不显示突出显示?
如果嵌入在容器视图中,didSelectRowAtIndexPath 仅在长按时有效[重复]