我有一个列表视图contactslist
。我写了代码来突出显示ListView
中的选定项目。它工作正常。当我点击一个项目时,它会突出显示该项目,但问题是如果我点击另一个项目,它也会突出显示该项目。我只想突出显示选定的项目。当我点击另一个项目时,前面的选择应该消失。
arg1.setBackgroundResource(R.drawable.highlighter);
这是单击侦听器中的代码,用于突出显示选中的项目。如何修复此问题?
我在适配器中设置行的背景:
public int[] colors = new int[]{0xFFedf5ff, 0xFFFFFFFF};
public int colorPos;
[...]
colorPos = position % colors.length;
row.setBackgroundColor(colors[colorPos]);
4条答案
按热度按时间qxgroojn1#
一个更好的方法是在你的主题中,@drawable/list_selector
list_selector.xml:
然后设置list_row. xml的根目录的背景android:background="?android:attr/activatedBackgroundIndicator”
1yjd4xko2#
在
onListItemClick
上尝试此操作它将突出显示所选内容。
wnavrhmk3#
默认情况下,
ListViews
没有设置choiceMode
(它设置为none
),因此当前的选择不会显示在视觉上。要改变这一点,您只需要将
ListView
的choiceMode
属性设置为singleChoice
。如果你想为列表中的选中项目自定义背景,你还应该设置
listSelector
属性。在那里你不仅可以指定颜色,还可以指定可绘制对象(图像,图层/状态可绘制对象)。如果您不直接使用
ListView
,而是使用ListActivity
,则需要从代码中设置这些属性,因此您应该使用以下行扩展Activity的onCreate
方法:因此,如果您正在使用单击侦听器来更改所选行的背景,请从代码中删除它,并使用上面的正确方法。
如果你从getView方法中设置背景,而不是使用静态颜色,应用一个可绘制到行背景的状态列表,并将duplicateParentState设置为true。这样它将根据项目的当前状态更改其显示:正常、聚焦、按下等。
km0tfn4u4#
在列表视图xml中添加“singleChoice”模式
在列表项布局中添加
android:attr/activatedBackgroundIndicator
范例