Android:将列表视图项设置为“选定”(突出显示)

Posted

技术标签:

【中文标题】Android:将列表视图项设置为“选定”(突出显示)【英文标题】:Android: set list view item as "selected" (highlighted) 【发布时间】:2012-09-26 08:59:40 【问题描述】:

在我的应用程序中,我想在平板电脑上执行类似于 gmail 应用程序的操作,左侧是项目列表,右侧是包含该项目内容的片段,例如对于 gmail 应用程序,此内容正在选择后下载。单击一个项目后,我希望它保持突出显示,直到我当然更改了选择。 我达到了一个可行的点,但只有当我在同一个项目上单击两次时,所以首先我单击,选择有效,然后该项目返回其“默认”状态,如果我再次单击它,选择器(用于选定state) 是可见的。

这是我目前所拥有的:

1) 选择器 (listitem_background.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_pressed="false" android:state_selected="false"/>
    <item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/listitem_focused" android:state_selected="true"/>

</selector>

2) 对于列表项的顶部线性布局:

android:background="@drawable/listitem_background"

(我也尝试将其设置为列表选择器)

3) 这是列表视图:

<ListView
    android:id="@+id/my_list_view"
    android:layout_
    android:layout_
    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);
    ...

[编辑] 事实上,我注意到在屏幕右侧提交片段后选择丢失了。如果我不提交片段,它就像一个魅力...... 我想我在选择器中需要这样的东西:

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

但显然不是这个……

【问题讨论】:

【参考方案1】:

好的,终于得到我的答案了。

想法是在选择器中使用state_activated和

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_
    android:layout_
    android:background="@drawable/listitem_background"
    android:orientation="vertical" >
...
<LinearLayout/>

【讨论】:

【参考方案2】:

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

android:background="?android:attr/activatedBackgroundIndicator"

This post 可以帮忙

【讨论】:

仅适用于 api 级别 >= 14

以上是关于Android:将列表视图项设置为“选定”(突出显示)的主要内容,如果未能解决你的问题,请参考以下文章

为 textview 设置选定状态(突出显示)

突出显示列表视图项

如何在泥浆中突出显示选定的列表项?

Xamarin.Forms ListView:设置点击项的突出显示颜色

如何选择/突出显示列表视图中的项目而不触摸它?

设置列表视图项模板的背景颜色和列表背景颜色时,Xamarin Forms Listview 选定项背景颜色丢失