ListView选中的项目可绘制

Bas*_*ant 3 android listview

我的ListView有问题.当我选择它到我自己的自定义drawable时,我想更改所选项目的背景,但它不起作用.

我希望在图像中具有此效果作为选定项目

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" 
          android:drawable="@drawable/selected_item"/>
    <item android:drawable="@android:color/transparent" />
</selector>
Run Code Online (Sandbox Code Playgroud)

这是list_row的文本

<!-- this layout is used to view row of category list and resturant list  -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/txt_category_row" 
    android:gravity="center"
    android:layout_width="match_parent" 
    android:textColor="@color/BLACK"
    android:layout_height="55dp" 
    android:padding="10dp"
    android:text="@string/hello" 
    android:layout_marginTop="5dp"

    android:textAppearance="?android:attr/textAppearanceLarge" />
Run Code Online (Sandbox Code Playgroud)

而这个ListView code.xml:

<ListView android:id="@+id/list_category" 
    android:layout_alignParentLeft="true" 
    android:layout_height="fill_parent" 
    android:layout_width="184dp" 
    android:dividerHeight="2px"
    android:background="@android:color/transparent"
    android:cacheColorHint="@android:color/transparent"
    android:layout_marginTop="5dp"  
    android:listSelector="@drawable/list_selector"
    android:divider="@color/Gray"  >
Run Code Online (Sandbox Code Playgroud)

Bar*_*rak 10

在触摸模式下,没有选择或聚焦状态.

但是,您可以使用已检查状态(即使没有复选框)并使用它来更改"选择"时的属性.在您设置为显示列表的Java代码中,在定义listview后添加以下行:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Run Code Online (Sandbox Code Playgroud)

然后在你的状态列表中更改XML:

android:state_selected="true"
Run Code Online (Sandbox Code Playgroud)

对此:

android:state_activated="true"
Run Code Online (Sandbox Code Playgroud)

所以现在你应该:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true"  
        android:drawable="@drawable/selected_item"/> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 
Run Code Online (Sandbox Code Playgroud)

最后,将行视图的背景设置为指向选择器文件:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/txt_category_row"  
    android:gravity="center" 
    android:layout_width="match_parent"  
    android:textColor="@color/BLACK" 
    android:layout_height="55dp"  
    android:padding="10dp" 
    android:text="@string/hello"  
    android:layout_marginTop="5dp" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:background="@drawable/item_selector" /> 
Run Code Online (Sandbox Code Playgroud)

你没有给你的状态列表XML命名,所以我只使用了"item_selector".您应该用实际上该文件的名称替换它.