如何使用选择器在长按时“永久”突出显示 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 行,但在正常按下时短暂显示的主要内容,如果未能解决你的问题,请参考以下文章

Edittext 在长按时进行选择但不显示上下文菜单?

Android webview 不应该在长按时显示操作栏

为啥我的 Java 自定义单元格渲染器在选择行/单元格时不显示突出显示?

如果嵌入在容器视图中,didSelectRowAtIndexPath 仅在长按时有效[重复]

当用户在移动设备上长按时如何在 div 或输入字段中选择完整的文本

UIbutton 仅在 longPress 上看起来被点击(突出显示)?