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

3
我看到了许多类似的问题,每个答案都非常针对具体问题,没有直截了当的答案,或者我发现教程展示了如何创建一个选中项目上被勾选的复选框。但是我无法理解如何从这些代码中完成它。
我正在遵循这里找到的教程,我的代码几乎与此相同,只是名称不同。
我想要一个多选ListView,在选择项目时,背景颜色会更改以标记我选择的项目。
也许我可以使用自定义选择器来实现这一点? 我了解到常见的方法是保存所选位置并在getView函数中执行某些操作。 我看到有人创建ViewHolder,但我真的不明白它与任何事情有关。 请问有人可以帮我吗?
提前感谢, Eric
3个回答

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);
    }
}

这段代码用于向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的适配器时

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


我遇到了和你一样的问题,但在你的解决方案中,我不明白"list"是什么意思? - Rohit
这是我在OnItemClick事件中命名列表的方式。 - eric.itzhak

0

有一种纯XML的解决方案。以下语法是针对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>

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项目背景


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接