我已经看过许多类似的问题,每个答案都是针对问题的,而且没有直接的答案,或者我找到了教程,展示了如何创建一个复选框,检查选定的项目。 而且我无法理解如何从这些代码中做到这一点。
我正在按照Here找到的教程,这很好地解释了我的代码只看到不同的名称。
我希望有一个多重选择ListView,当选择的项目背景颜色被更改为标记我选择的项目时。
也许我可以使用自定义选择器来完成此操作? 我理解常见的方法是保存所选的位置并在getView函数中执行某些操作。 我看到人们创建ViewHolder,但我并不真正理解它与任何东西有什么关系。 有人可以帮助我吗?
提前感谢, 埃里克
答案 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>
答案 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>