在Android的列表视图中只突出显示选定的项目

wixjitnu  于 2023-04-04  发布在  Android
关注(0)|答案(4)|浏览(132)

我有一个列表视图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]);
qxgroojn

qxgroojn1#

一个更好的方法是在你的主题中,@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"/>

然后设置list_row. xml的根目录的背景android:background="?android:attr/activatedBackgroundIndicator”

1yjd4xko

1yjd4xko2#

onListItemClick上尝试此操作

view.getFocusables(POSITION);
view.setSelected(true);

它将突出显示所选内容。

wnavrhmk

wnavrhmk3#

默认情况下,ListViews没有设置choiceMode(它设置为none),因此当前的选择不会显示在视觉上。
要改变这一点,您只需要将ListViewchoiceMode属性设置为singleChoice
如果你想为列表中的选中项目自定义背景,你还应该设置listSelector属性。在那里你不仅可以指定颜色,还可以指定可绘制对象(图像,图层/状态可绘制对象)。

<ListView android:id="@+id/my_list"
        android:choiceMode="singleChoice" 
        android:listSelector="@android:color/darker_gray" />

如果您不直接使用ListView,而是使用ListActivity,则需要从代码中设置这些属性,因此您应该使用以下行扩展Activity的onCreate方法:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(android.R.color.darker_gray);

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

  • 回复更新 *

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

km0tfn4u

km0tfn4u4#

在列表视图xml中添加“singleChoice”模式

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice"
    (...) >
</ListView>

在列表项布局中添加
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>

相关问题