2010-09-09 66 views
0

我有两个可用作背景的drawable,用于指示列表项的状态(按下或选择)。 Pressed drawable是一个选择器,但没有指定状态;它通过XML连接成为列表的android:listSelector。在Android中避免高亮显示闪光灯

<?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 highlight,而另一个项目有(并且保持)Pressed突出显示。我相信这是因为媒体发生得如此之快以至于它不会被底层框架解读为点击,所以没有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> 

但这关闭压亮点我的代码之前,可以将选定的亮点的不幸影响,所以在两个州之间有一个不亮的闪光灯,无论我在onItemClick处理程序中多早,我都会把setBackgroundResource调用。

另一种解决方案是不仅监视onItemClick事件,而且还监视onTouch事件,并处理代码中的所有内容;看起来会让事情变得太慢。

我该怎么做才能避免闪光灯和双选状态?

回答

1

我看到你说你的情况比简单地改变背景可绘制更复杂,所以我很抱歉,如果我有过分简化。

你为什么不让xml选择器处理它所能做的一切?您应该能够设置选择器xml来处理按下和选择状态以更改背景资源,以避免您看到的闪现和双选。我的假设是,如果背景没有做出奇怪的事情,那么你在java中做的其他东西就足够快而不会被注意到。

我喜欢用list_selector_background from the android frameworkdrawable documentation for state list作为我这样做的参考,虽然list_selector_background可能会更复杂一点,你的需求可能会更大。

+0

谢谢;这是有道理的。我会尝试一下,让你知道它是如何工作的。 – 2010-09-10 13:44:05