2011-05-02 104 views
32

我有1列表视图contactslist。我编写了用于突出显示ListView中所选项目的代码。这是工作。当我点击1项目时,突出显示该项目,但问题在于,如果我点击其他项目,也会突出显示该项目。我只想突出显示所选项目。当我点击另一个项目时,以前的选择将不再需要。突出显示在Android中的列表视图中选定的项目

arg1.setBackgroundResource(R.drawable.highlighter); 

这是点击侦听器中用于突出显示所选项目的代码。 PLZ帮助我。

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

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

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

如果答案是可以接受的,我可以接受dat.but如果答案不帮助我den如何接受? – 2011-05-02 06:38:59

+0

如果您对答案不满意,请忘记我之前评论的提升部分。但是更多的信息会帮助我们确定问题的根源,以及如何为您提供帮助。谢谢! – rekaszeru 2011-05-02 06:49:36

+0

我使用相对layout.i设置列表视图使用适配器的背景,我的逻辑是如果rawnum是一个奇怪的背景颜色,如果它甚至数字给另一个背景color.below是逻辑implementation.public int [] colors = new int [] {0xFFedf5ff,0xFFFFFFFF}; \t public int colorPos; \t colorPos = position%colors.length; \t \t row.setBackgroundColor(colors [colorPos]); – 2011-05-02 07:36:49

回答

105

ListViews默认情况下没有choiceMode集(它被设置为none),所以目前选择没有直观的标示。

要更改此设置,您只需将ListViewchoiceMode属性设置为singleChoice即可。
如果您希望列表中选定项目的自定义背景,则还应该设置listSelector属性。在那里你不仅可以指定颜色,而且可以绘制(图像,图层/状态可绘制)。

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

如果你不直接使用ListView,但ListActivity,那么这些属性需要从代码集,所以你应该用这些行拓展业务的onCreate方法:

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

因此,如果您正在使用点击侦听器更改所选行的背景,请从您的代码中移除该背景,然后使用上面的正确方法。

回复更新

如果您设置您的getView方法的背景,而是采用了静态的色彩,应用状态列表绘制到该行背景duplicateParentState设置为true。这种方式将根据项目的当前状态,更改其显示:正常,关注,压制等

+0

我试过这个代码,但如果我让列表视图choice_mode_single den首先选择的项目是突出显示,但如果我选择另一个项目它不突出显示。 – 2011-05-02 08:37:20

+1

是否有任何方法或属性来获取列表视图中的上一个选定的项目? – 2011-05-02 08:40:34

+0

您是否使用onitemclick侦听器删除了设置背景的代码? – rekaszeru 2011-05-02 10:52:54

0

尝试此onListItemClick

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

它突出的选择。

7

更好的方法是 在你的主题, @绘制/ 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的根,然后设置背景:背景=“?机器人:ATTR/activatedBackgroundIndicator “

20

在ListView XML添加 ”singleChoice“ 模式

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

在列表项布局添加

的android:背景=”?机器人:attr/activatedBackgroundIndicator

ex充足的

<?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> 
+0

为什么这不是Google上的第一件事!?我一直在努力几个小时才能使这个工作。我尝试了用android:listSelector =“@ drawable/theSelector”设置一个可选择的选择器中的各种状态和状态组合(选中,激活,聚焦等),但是当它工作时,它是错误的当我滚动列表时,会停留在停留状态,有时候甚至停留在两个项目之间)。这最终使它正常工作。谢谢。 – 2016-02-09 04:01:46

相关问题