2011-12-19 116 views
9

我知道android不会在TouchMode中突出显示任何内容。但我正在做一些类似于gmail应用程序的东西,在这个应用程序中,您从左侧选择了一些东西,并在活动的右侧显示详细信息(想知道Google如何做到这一点)。如何突出显示ListView中的选定项目?

所以故事是我必须突出显示在左侧ListView中选择了什么。我已经发现了一些类似的问题和解决方案基本上是:

1.override适配器的getView方法的setBackground的观点onItemClick的选定位置

2.setBackground并清除花药选择

但是,由于一个奇怪的行为,他们都没有为我工作:当我点击一个项目并突出显示它时,它后面的第五个项目也突出显示,以此类推,当我向下滚动列表时。

有什么建议吗?谢谢!

回答

21

使用listView.setChoiceMode(int choiceMode);

参数

choiceMode一个CHOICE_MODE_NONE,CHOICE_MODE_SINGLE的,或从CHOICE_MODE_MULTIPLE类android.widget.AbsListView

http://developer.android.com/reference/android/widget/AbsListView.html#setChoiceMode(int)

您还需要添加MultiChoiceModeListener,你可以有CHOICE_MODE_SINGLE

(android.widget.AbsListView.MultiChoiceModeListener)

参照下面

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List16.html

+0

是否可以做任何事情?我试过,但选择器不留尽管.. – Han 2011-12-19 19:20:08

+0

添加更多解释 – 2011-12-19 19:25:37

+0

非常感谢!通过添加MultiChoiceModeListener并将适配器的背景设置在它的xml文件中工作!但我想知道为什么Android只有在选择项目时才采用背景颜色..所以自动 – Han 2011-12-19 22:09:47

1

您突出显示多个项目的原因可能是因为您要么:重新使用整个视图,要么将这两个视图的背景设置为相同的Drawable实例。如果屏幕上有两次相同的drawable,则第一个发生的所有事件都会发生在所有其他事件上,因为该逻辑是在Drawable本身的实例中实现的。

为了解决这个问题,无论是:不要再使用了多行意见,或者不重复使用的多行可绘制(创建一个新的每次)

我知道这听起来大量资源,而且它是的,但除非你有更好的解决方案,否则这是最简单的解决方案。

+0

感谢的人..现在我想看看那里的代码重用的观点,因为我没有写的。顺便说一句,是否有可能让选择器停留在顶部而不是改变背景?如果它是可行的,它会更有意义。 – Han 2011-12-19 19:31:31

0

样品因为在列表视图模仿顶部的那些物品,他们还模仿他们的背景。您必须在getView()函数中设置项目的每个背景。在getView()中的每个项目中,您必须为所选项目和未选项目设置背景。

16

这是定制listactivity或ListView中ListFragment

高亮选择的项目

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) 
{ 

    for(int a = 0; a < parent.getChildCount(); a++) 
    { 
     parent.getChildAt(a).setBackgroundColor(Color.TRANSPARENT); 
    } 

    view.setBackgroundColor(Color.GREEN); 
} 
2

//// @绘制/ list_selector

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:drawable="@drawable/list_item_bg_normal" 
android:state_pressed="false" android:state_selected="false" android:state_activated="false"/> 

<item android:drawable="@drawable/list_item_touch" 
android:state_pressed="true"/> 

<item android:drawable="@drawable/list_item_touch" 
android:state_pressed="false" android:state_selected="true"/> 

<item android:drawable="@drawable/list_item_bg_pressed" 
android:state_activated="true"/> 

</selector> 

//////// //////////// and on ListView

<ListView 
    android:id="@+id/list_slidermenu" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:choiceMode="singleChoice" 
    android:dividerHeight="1dp" 
    android:listSelector="@drawable/list_selector" 
    android:background="@color/list_background" 
    android:divider="#060606"/> 

/////////////////////// ListView项

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_selector"> 

    <ImageView 
    android:id="@+id/icon" 
    android:layout_width="35dp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="12dp" 
    android:layout_marginRight="12dp" 
    android:contentDescription="@string/desc_list_item_icon" 
    android:src="@drawable/ic_home" 
    android:layout_centerVertical="true" /> 

    </RelativeLayout> 
0

以此为列表选择:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/list_bg" /> 
</selector> 

list_bg

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="@color/list_bg_color" /> 
</shape> 

选择自己偏爱的高亮颜色

相关问题