Listview上的ListSelector不起作用

时间:2012-10-25 13:06:45

标签: android listview

我有这样的自定义列表选择器:

<?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/bg_list_hover"></item>
    <item 
        android:state_focused="true"
        android:drawable="@drawable/bg_list"></item>
</selector>

和我的列表视图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/bg_dasar" >
    <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="StoreCategory" 
                android:textSize="15sp"
                android:paddingLeft="10dip"
                android:paddingTop="10dip"
                android:paddingRight="10dip"
                android:textColor="@color/textcolor"/>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:listSelector="@drawable/listselector">
    </ListView>

我的问题是,当我没有点击列表视图时,listview项目不使用聚焦状态背景(@drawable/bg_list)......

任何人都可以帮助我吗???

4 个答案:

答案 0 :(得分:5)

对于那些仍然需要它的人:关键是将listSelector设置为列表项的背景!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#819FF7"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/mainList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cacheColorHint="#819FF7"
        />

 </LinearLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lineItem"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector">

     <ImageView android:id="@+id/imageView"
        android:layout_width="96dp"
        android:layout_height="64dp"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp" 
        android:layout_marginTop="10dp" 
        android:layout_marginBottom="10dp" />

    <TextView
        android:id="@+id/textView"
        android:layout_toRightOf="@+id/imageView"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip" 
        android:layout_centerVertical="true"
        android:textSize="18sp"
        android:textColor="#ff000000" 
        android:layout_width="wrap_content"
        />
    <Button 
        android:id="@+id/button" 
        android:gravity="center"
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp" 
        android:layout_alignParentRight="true"
        android:focusable="false" 
        android:text="Delete" />

</RelativeLayout>

答案 1 :(得分:3)

通过阅读一些参考,我解决了我的问题.. 我的listselector应该是这样的:

<?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/bg_list_hover" />
 <item 
     android:drawable="@drawable/bg_list" />
</selector>

我的listview布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/bg_dasar" >
    <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="StoreCategory" 
                android:textSize="15sp"
                android:paddingLeft="10dip"
                android:paddingTop="10dip"
                android:paddingRight="10dip"
                android:textColor="@color/textcolor"/>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dip"
        **android:listSelector="@android:color/transparent"**>
    </ListView>

</LinearLayout>

我还将列表选择器添加到列表项背景中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="55dip"
    android:orientation="horizontal" 
    android:padding="15dip"
    android:gravity="center_vertical"
    **android:background="@drawable/listselector"**>

    <ImageView
        android:id="@+id/imageViewlogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dip" />

    <TextView
        android:id="@+id/textViewcategory"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="@color/textcolor" 
        android:textSize="15sp"/>

</LinearLayout>
杰伊&amp; amp; danwilkie回答我的问题.. :))

答案 2 :(得分:0)

在xml中设置android:focusable =“true”后,您是否尝试在代码中的listView上调用“requestFocus()”?从查看文档:

“调用此方法以尝试将焦点放在特定视图或其后代之一。如果视图不可聚焦(isFocusable()返回false),或者它是可聚焦的,则视图实际上不会获得焦点。当设备处于触摸模式时,无法在触摸模式下聚焦(isFocusableInTouchMode())。另请参阅focusSearch(int),这就是您所说的有焦点,并且您希望您的父母寻找下一个。相当于使用参数FOCUS_DOWN和null调用requestFocus(int,Rect)。“

答案 3 :(得分:0)

现在看来你的选择器xml在点击某个项目时会使用bg_list_hover,而当你专注于某个项目时会使用bg_list(例如,使用轨迹球)。

如果您想要在默认情况下使用自定义drawable,既未单击也无需关注项目,则需要为其添加条目:

我会用这样的东西:

<?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/bg_list_pressed"></item>
    <item 
        android:state_focused="true"
        android:drawable="@drawable/bg_list_focused"></item>
    <item 
        android:drawable="@drawable/bg_list"></item>
</selector>