Android ListView自定义选定图标

Android ListView自定义选定图标,android,listview,android-drawable,Android,Listview,Android Drawable,我有一个列表视图,用户可以在其中选择一些内容: <ListView android:id="@+id/poll_list" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:choiceMode="singleChoice" android:listSelector="#666" />

我有一个列表视图,用户可以在其中选择一些内容:

<ListView
    android:id="@+id/poll_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:choiceMode="singleChoice"
    android:listSelector="#666" />

那很好。当用户选择某件物品时,该物品会用
#666
着色。但我更希望它显示一个自定义图标。右对齐的复选标记图形

我可以在我的项目视图中包含该图形。但是如何基于状态显示它(而不必让适配器跟踪已检查的状态并始终使所有数据无效)

在CSS中,它将是一个右对齐的背景图形,仅在
:active
上可见。但在安卓系统中如何做到这一点呢?我认为定制的可绘图设备应该可以实现这一点。

您可以使用像这样的设备来实现这一效果:

左侧和顶部的黑色条告诉Android在必要时通过在这些区域拉伸来调整drawable的大小。在本例中,这两个区域都是透明的,因此它会导致检查右对齐

要在代码中使用它,只需将列表选择器设置为9-patch可绘制。像这样:

    lv.setSelector(R.drawable.ic_check_black_rightaligned);
或者像这样:

    ...
    android:listSelector="@drawable/ic_check_black_rightaligned"
    ...
正确的方法(我一直都这样做)是,在
getView()函数中设置数据时更改背景图像。无论何时单击任何项目,只要更改其数据并调用
notifyDatasetChanged()
。这不是一个昂贵的手术。