如何更改ListView中所选项目的背景颜色?

时间:2012-05-04 10:39:36

标签: android android-listview

我已经看过许多类似的问题,每个答案都是针对问题的,而且没有直接的答案,或者我找到了教程,展示了如何创建一个复选框,检查选定的项目。 而且我无法理解如何从这些代码中做到这一点。

我正在按照Here找到的教程,这很好地解释了我的代码只看到不同的名称。

我希望有一个多重选择ListView,当选择的项目背景颜色被更改为标记我选择的项目时。

也许我可以使用自定义选择器来完成此操作? 我理解常见的方法是保存所选的位置并在getView函数中执行某些操作。 我看到人们创建ViewHolder,但我并不真正理解它与任何东西有什么关系。 有人可以帮助我吗?

提前感谢, 埃里克

3 个答案:

答案 0 :(得分:13)

嗯,我终于解决了,希望这有助于某人:

我所做的是ArrayList<Integer>,它存储了所选项目的所有位置,并在点击时切换背景颜色。

在我的适配器中我定义:

public ArrayList<Integer> selectedIds = new ArrayList<Integer>();

使用以下方法:

    public void toggleSelected(Integer position)
{
    if(selectedIds.contains(position))
    {
        selectedIds.remove(position);


    }
    else
    {
        selectedIds.add(position);
    }
}

addes \从ArrayList中删除项目

在我的getView方法中:

            if (selectedIds.contains(position)) {
            convertView.setSelected(true);
            convertView.setPressed(true);
            convertView.setBackgroundColor(Color.parseColor("#FF9912"));
        }
        else
        {
            convertView.setSelected(false);
            convertView.setPressed(false);
            convertView.setBackgroundColor(Color.parseColor("#000000"));
        }

检查位置是否存在于ArrayList中。如果是,请将其绘制为选中状态。如果没有,则相反。

剩下的就是OnItemClick监听器,我补充说:

    ((YourAdapter)list.getAdapter()).toggleSelected(new Integer(position));

当YourAdapter是ListView的适配器

希望这对任何人都有帮助,因为这是一个通用答案:)

答案 1 :(得分:0)

您还可以将以下选择器设置为列出项目布局的背景:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@color/android:transparent" />
    <item android:drawable="@drawable/listitem_normal" />
</selector>

来源:ListView item background via custom selector

答案 2 :(得分:0)

有一个简单的XML解决方案。以下语法是WRT API 15。 我使用了以下列表项模板:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/item_selection">
    <ImageView />
    <.. />
</LinearLayout>

它指向res / drawable-hdpi中的文件item_selection.xml(在Android Studio 0.8.14中):

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

    <item android:drawable="@android:color/holo_blue_dark" android:state_selected="true" />
</selector>