ListView自定义选择器不起作用

时间:2015-09-24 18:30:35

标签: android listview selector drawable

我目前正试图在列表视图悬停时应用选择器。当它悬停,聚焦或按下时,它需要变灰。所以我一直在堆栈上搜索一些帖子,但他们似乎都没有工作。

我的选择器:

trait DBObject
trait Dim1Agg extends DBObject
trait IDataContext[A]

abstract class IDataContextBuilder[+A <: DBObject] {
  def initXDataPoints[B>:A](dataContext: IDataContext[B]): Unit
}

class Dim1DataContextBuilder extends IDataContextBuilder[Dim1Agg] {
  override def initXDataPoints[B >: Dim1Agg](dataContext: IDataContext[B]): Unit = ???
}

我的列表视图:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="true"
        android:state_pressed="true" android:drawable="@drawable/hover" />
    <item android:state_enabled="true"
        android:state_focused="true" android:drawable="@drawable/hover" />
    <item android:state_enabled="true"
        android:state_selected="true" android:drawable="@drawable/hover" />
    <item
        android:drawable="@drawable/normal" />
</selector>

我的自定义列表项视图:

<ListView
    android:id="@+id/supplier_scan_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:divider="#eaeaea"
    android:dividerHeight="0.5dp"
    android:drawSelectorOnTop="true"
    android:fastScrollEnabled="false"
    android:footerDividersEnabled="false"
    android:listSelector="@drawable/listselector"
    android:overScrollFooter="@android:color/transparent">

有谁知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

将这些行添加到列表视图中:

android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="blocksDescendants" 

selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/normal" android:state_activated="false"/>
<item android:drawable="@drawable/hover" android:state_pressed="true"/>
<item android:drawable="@drawable/hover" android:state_activated="true"/>
</selector>

答案 1 :(得分:0)

解决方案:

此listview使用自定义适配器(BaseAdapter)。在这个适配器中,我使rootview成为onClick,但这取消了我的listSelector。所以我把它改成了ListView上的onItemClick,并提供了一个额外的方法来返回我的Adapter所需的信息。通过这样做,listSelector再次工作。