在android中突出显示列表视图中的选定项

在android中突出显示列表视图中的选定项,android,listview,selecteditem,Android,Listview,Selecteditem,我有一个列表视图联系人列表。我编写了在列表视图中突出显示所选项目的代码。它正在工作。当我单击一个项目时,它会高亮显示该项目,但问题是如果我单击其他项目,它也会高亮显示该项目。我只想突出显示所选项目。当我单击另一个项目时,上一个选择必须消失 arg1.setBackgroundResource(R.drawable.highlighter); 这是click listener中用于高亮显示所选项目的代码。请帮帮我 更新 我正在设置适配器中行的背景: public int[] colors = n

我有一个列表视图
联系人列表
。我编写了在
列表视图中突出显示所选项目的代码。它正在工作。当我单击一个项目时,它会高亮显示该项目,但问题是如果我单击其他项目,它也会高亮显示该项目。我只想突出显示所选项目。当我单击另一个项目时,上一个选择必须消失

arg1.setBackgroundResource(R.drawable.highlighter);
这是click listener中用于高亮显示所选项目的代码。请帮帮我

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

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

[...]
colorPos = position % colors.length; 
row.setBackgroundColor(colors[colorPos]);

默认情况下,
列表视图
没有设置
选项模式
(设置为
),因此当前选择不会直观显示

要更改此设置,只需将
列表视图的
choiceMode
属性设置为
单选
如果要为列表中的选定项目设置自定义背景,还应设置
listSelector
属性。在这里,您不仅可以指定颜色,还可以指定可绘制内容(图像、图层/状态可绘制内容)

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

对更新的答复


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

onListItemClick上尝试此操作

view.getFocusables(POSITION);
view.setSelected(true);
它突出显示所选内容。

更好的方法是 在你的主题中, @可绘图/列表选择器

list_selector.xml:


然后为列表根目录设置背景。\u row.xml android:background=“?android:attr/activatedBackgroundIndicator”


在listview xml中添加“singleChoice”模式


在列表项布局中添加

android:background=“?android: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> 


如果答案是可以接受的,我可以接受dat。但是如果答案对我没有帮助,我怎么能接受呢?如果你对答案不满意,请忘记我之前评论中的增强部分。但是更多的信息将真正帮助我们找出问题的根源,以及如何帮助你。谢谢!我使用的是相对布局。我正在使用适配器为列表视图设置背景,我的逻辑是,如果rawnum是奇数,则给背景色,如果它是偶数,则给另一个背景色。下面是逻辑实现。public int[]colors=new int[]{0xFFedf5ff,0xFFFFFFFF};public int colorPos;colorPos=位置%colors.length;行.setBackgroundColor(颜色[colorPos]);从现在起,请编辑您的问题以共享代码片段,而不是将其粘贴到注释中,因为此处的代码不太可读。如果您提供处理所选背景的代码,这也会很有帮助。谢谢!谢谢…但尚未获得d解决方案。我被困在这个问题上。请帮助我尝试了此代码,但如果我列出了此代码,则查看选项\u模式\u单点显示第一个选中的项目正在高亮显示,但如果我选择了另一个项目,它将不会高亮显示。是否有任何方法或属性来获取列表视图中的上一个选中项目?是否删除了使用onitemclick侦听器设置背景的代码?我使用的是
android.support.v4.app.ListFragment
。添加onCreate()中的行
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
给了我异常:
java.lang.RuntimeException:无法启动活动组件信息{…}:android.view.InflateException:Binary XML文件行#90:Error-inflating class fragment
我过去尝试过很多组合,但最近又遇到了这个问题。我想知道它是否是特定于设备的,我的2.3设备与Youngjae有相同的问题。为什么这不是Google上出现的第一件事呢?我一直在尝试h我尝试了各种状态和状态组合(选择的、激活的、聚焦的等等),在一个选择器中使用
android:listSelector=“@drawable/theSelector”
set绘制,但当它工作时,它出现了问题(当我滚动列表时,选择指示器会有点卡住,有时甚至停留在两个项目之间)。这最终使它正常工作。谢谢。我喜欢一行……非常感谢!这对我来说很好。谢谢
view.getFocusables(POSITION);
view.setSelected(true);
<!-- <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"/>
<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice"
    (...) >
</ListView>
<?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>