我有两个可绘制对象用作背景来指示我的列表项的状态(按下或选择)。Pressed drawable 是一个选择器,但没有指定状态;它通过 XML 连接成为列表的 android:listSelector。
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/my_actual_drawable" />
</selector>
然而,Selected drawable 是通过代码应用的,因为它很复杂,并且在选择项目时需要进行不止一个简单的背景可绘制更改。
如果我在两个列表项之间快速单击,则一个项目可以具有(并保持)选定的突出显示,而另一个项目具有(并保持)按下的突出显示。我相信这是因为新闻发生得太快了,以至于底层框架没有将其解释为点击,所以没有onItemClick
到达我的列表。
一种解决方案是使用带状态的选择器(这就是选择器的用途!):
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/my_actual_drawable" />
</selector>
但这具有在我的代码可以应用 Selected 突出显示之前关闭 Pressed 突出显示的不幸效果,因此无论onItemClick
我在处理程序中多早setBackgroundResource
发出调用,两种状态之间都会出现不突出显示。
另一种解决方案是不仅要监视onItemClick
事件,还要监视onTouch
事件,并在代码中处理所有内容;这似乎使事情变得太慢了。
我该怎么做才能避免闪烁和双选状态?