3

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

我正在关注在此处找到的教程,这就是我的代码看起来只是不同名称的方式。

我想要一个多重选择ListView,当一个项目被选中时,背景颜色会改变以标记我选择的项目。

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

提前致谢, 埃里克

4

3 回答 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 的适配器时

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

于 2012-05-04T12:37:14.293 回答
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 项目背景

于 2013-12-17T19:24:49.567 回答
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>
于 2014-11-23T20:43:37.583 回答