突出显示android中listview中的选定项目

and*_*irl 41 android listview selecteditem

我有一个列表视图contactslist.我编写了代码来突出显示所选项目ListView.这是工作.当我点击1项时,它突出显示该项目,但问题是如果我点击其他项目也突出显示该项目.我想只突出显示所选项目.当我点击另一个项目时,之前的选择将不复存在.

arg1.setBackgroundResource(R.drawable.highlighter);
Run Code Online (Sandbox Code Playgroud)

这是单击侦听器中用于突出显示所选项的代码.请帮助我.

更新
我正在设置适配器中行的背景:

public int[] colors = new int[]{0xFFedf5ff, 0xFFFFFFFF}; 
public int colorPos; 

[...]
colorPos = position % colors.length; 
row.setBackgroundColor(colors[colorPos]);
Run Code Online (Sandbox Code Playgroud)

rek*_*eru 115

ListViews默认情况下没有choiceMode设置(设置为none),因此当前选择不会在视觉上显示.

要更改此设置,您只需设置to的choiceMode属性ListView即可singleChoice.
如果您希望列表中所选项目的自定义背景,则还应设置该listSelector属性.在那里,您不仅可以指定颜色,还可以指定drawable(图像,图层/状态 - 绘图).

<ListView android:id="@+id/my_list"
        android:choiceMode="singleChoice" 
        android:listSelector="@android:color/darker_gray" />
Run Code Online (Sandbox Code Playgroud)

如果你不ListView直接使用,但是a ListActivity,那么这些属性需要从代码中设置,所以你应该onCreate用这些行扩展你的activity的方法:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(android.R.color.darker_gray);
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用单击侦听器来更改所选行的背景,请从代码中删除它,并使用上面的正确方法.

回复更新

如果从getView方法设置背景,而不是使用静态颜色,请将可绘制的状态列表应用于行背景,并将duplicateParentState设置为true.这样它将根据项目的当前状态更改其显示:正常,聚焦,按下等.


Gon*_*rto 26

在listview xml中添加"singleChoice"模式

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice"
    (...) >
</ListView>
Run Code Online (Sandbox Code Playgroud)

在列表项布局中添加

机器人:背景="机器人:ATTR/activatedBackgroundIndicator

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal"
   android:background="?android:attr/activatedBackgroundIndicator">

     <!-- your item content-->

</LinearLayout> 
Run Code Online (Sandbox Code Playgroud)


sub*_*r_a 8

更好的方法是在你的主题中,@ drawable/list_selector

list_selector.xml:

<!-- <item android:drawable="@color/android:transparent"  android:state_selected="true" /> -->
<item android:drawable="@color/list_bg" android:state_selected="true"/>
<item android:drawable="@color/list_bg" android:state_activated="true"/>
<item android:drawable="@color/transparent"/>
Run Code Online (Sandbox Code Playgroud)

然后设置list_row.xml的root的背景android:background ="?android:attr/activatedBackgroundIndicator"