Android 所选ListView项目不存在';即使已分配ColorStateList资源,也不能更改文本颜色

Android 所选ListView项目不存在';即使已分配ColorStateList资源,也不能更改文本颜色,android,listview,Android,Listview,我希望列表视图中项目的文本颜色在选中时发生更改。我阅读了以下帖子()并做了以下更改: 创建了ColorStateList资源@drawable/list_item.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="#ffffff00" /> &l

我希望列表视图中项目的文本颜色在选中时发生更改。我阅读了以下帖子()并做了以下更改:

创建了ColorStateList资源@drawable/list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#ffffff00" /> <!-- default -->
<item
    android:state_pressed="true"
    android:color="#ff000000" />
<item
    android:state_selected="true"
    android:color="#ffff0000" />
<item
    android:state_focused="true"
    android:color="#ff0000ff" />

已将资源分配给目标TextView中的textColor属性

<TextView
    android:id="@+id/person_active_list_name"
    android:paddingLeft="@dimen/person_list_name_left_padding"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/person_list_image_size"
    android:layout_toEndOf="@id/person_active_thumbnail"
    android:layout_toLeftOf="@id/person_active_list_arrow"
    android:layout_toRightOf="@id/person_active_thumbnail"
    android:layout_toStartOf="@id/person_active_list_arrow"
    android:gravity="center|start"
    android:textColor="@drawable/list_item" />


出于某种原因,只应用了@drawable/list_item.xml中的默认颜色(因此,TextView确实正在使用ColorStateList资源)。但是,当按下、选择列表项等时,文本颜色没有变化。欢迎提供任何帮助

来自文档:

注意:请记住,将应用状态列表中与对象当前状态匹配的第一项。因此,如果列表中的第一项不包含上述任何状态属性,那么每次都会应用它,这就是为什么默认值应该始终是最后一个

因此,将您的定义改为:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_pressed="true"
        android:color="#ff000000" />

    <item
        android:state_selected="true"
        android:color="#ffff0000" />

    <item
        android:state_focused="true"
        android:color="#ff0000ff" />

    <item android:color="#ffffff00" /> <!-- default -->

</selector>

来自文档:

注意:请记住,将应用状态列表中与对象当前状态匹配的第一项。因此,如果列表中的第一项不包含上述任何状态属性,那么每次都会应用它,这就是为什么默认值应该始终是最后一个

因此,将您的定义改为:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_pressed="true"
        android:color="#ff000000" />

    <item
        android:state_selected="true"
        android:color="#ffff0000" />

    <item
        android:state_focused="true"
        android:color="#ff0000ff" />

    <item android:color="#ffffff00" /> <!-- default -->

</selector>


啊,谢谢你向我指出这一点!我只是没有读完整的文档,真傻。它现在正在工作,非常感谢。另外,对于遇到这种情况的任何其他人,我的特殊情况需要使用state_activated=“true”而不是state_selected=“true”。啊,谢谢你向我指出这一点!我只是没有读完整的文档,真傻。它现在正在工作,非常感谢。另外,对于遇到这种情况的任何其他人,我的特定案例需要使用state_activated=“true”而不是state_selected=“true”。