Android 安卓:将列表视图项设置为";精选;(突出显示)

Android 安卓:将列表视图项设置为";精选;(突出显示),android,listview,selector,highlight,Android,Listview,Selector,Highlight,在我的应用程序中,我想做一些类似于平板电脑上的gmail应用程序的事情,左边是项目列表,右边是该项目内容的片段,就像gmail应用程序一样,该内容是在选择后下载的。单击某个项目后,我希望它保持高亮显示,当然,我要更改选择。 我达到了这样一个效果,但只有当我在同一个项目上单击两次时,选择才会起作用,因此首先我单击,选择会起作用,然后项目会返回到其“默认”状态,如果我再次单击它,则选择器(用于选定状态)可见 这就是我到目前为止所做的: 1) 选择器(listitem_background.xml)

在我的应用程序中,我想做一些类似于平板电脑上的gmail应用程序的事情,左边是项目列表,右边是该项目内容的片段,就像gmail应用程序一样,该内容是在选择后下载的。单击某个项目后,我希望它保持高亮显示,当然,我要更改选择。 我达到了这样一个效果,但只有当我在同一个项目上单击两次时,选择才会起作用,因此首先我单击,选择会起作用,然后项目会返回到其“默认”状态,如果我再次单击它,则选择器(用于选定状态)可见

这就是我到目前为止所做的:

1) 选择器(listitem_background.xml)

(我也尝试将其设置为listselector)

3) 这是ListView:

<ListView
    android:id="@+id/my_list_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice"
    android:dividerHeight="1dp"
    android:drawSelectorOnTop="true"
    android:fadeScrollbars="true"
    android:fastScrollEnabled="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:scrollbarFadeDuration="100"
    android:scrollbars="vertical" />

4) 在代码部分,我尝试使用以下内容:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    view.setSelected(true);
    ...
}
@覆盖
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
view.setSelected(true);
...
}
[编辑]事实上,我注意到在屏幕右侧提交片段后,选择丢失。如果我不提交碎片,它就像一个符咒。。。 我想我在选择器中需要这样的东西:

<item android:drawable="@drawable/listitem_focused" android:state_activated="true" android:state_focused="false"/>


但显然不是这个…

好的,我终于得到了答案

其思想是使用选择器中激活的状态_

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE) 
在代码中,或者

android:choiceMode="singleChoice"
当然是在xml中

选择器的外观如下所示:

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

    <item android:drawable="@drawable/solid_white" android:state_activated="false"/>
    <item android:drawable="@drawable/solid_white" android:state_activated="false" android:state_pressed="false"/>
    <item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/listitem_focused" android:state_activated="true"/>

</selector>

以下是列表项布局的方式:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/listitem_background"
    android:orientation="vertical" >
...
<LinearLayout/>

...

我遇到了同样的问题,然后我只需要在我的项目视图xml中添加一行简单的内容

android:background=“?android:attr/activatedBackgroundIndicator”


只有api级别>=14时才有帮助
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/solid_white" android:state_activated="false"/>
    <item android:drawable="@drawable/solid_white" android:state_activated="false" android:state_pressed="false"/>
    <item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/listitem_focused" android:state_activated="true"/>

</selector>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/listitem_background"
    android:orientation="vertical" >
...
<LinearLayout/>