这适用于所有试图:
-以编程方式选择 ListView 中的项目
-使该项目保持突出显示
我正在研究 Android ICS,我不知道它是否适用于所有级别的 Api。
首先创建一个列表视图(如果您已经在 listActivity/listFragment 中,则获取它)
然后将列表视图的选择模式设置为 single with :Mylistview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
然后以编程方式选择您的项目:(Mylistview.setItemChecked(position, true);
位置是一个整数,表示要选择的项目的等级)
现在您的项目实际上已被选中,但您可能什么也看不到,因为选择没有视觉反馈。现在您有两个选择:您可以使用预构建的列表视图或自定义列表视图。
1)如果您想要一个预建的列表视图,请尝试simple_list_item_activated_1
, simple_list_item_checked
, simple_list_item_single_choice
, 等...
您可以像这样设置您的列表视图,例如:setListAdapter(new ArrayAdapter<String>(this, R.layout.simple_list_item_activated_1, data))
按照您选择的预建列表视图,您现在会看到,当您选中时,您会选中一个复选框或更改背景颜色等...
2)如果您使用自定义列表视图,那么您将定义将在每个项目中使用的自定义布局。在此 XML 布局中,您将为行中的每个部分视图指定一个选择器,选择时需要更改该选择器。
假设当您选择您的行时,您希望更改文本颜色和背景颜色。您的 XML 布局可以这样写:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/menu_item_background_selector"
android:orientation="horizontal" >
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="@drawable/menu_item_text_selector" />
现在,在可绘制文件夹中创建 menu_item_background_selector.xml 和 menu_item_text_selector.xml。
menu_item_text_selector.xml :
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
android:color="#FFF">
</item>
<item android:state_pressed="true"
android:color="#FFF">
</item>
<item android:state_pressed="false"
android:color="#000">
</item>
</selector>
选择时文本将是白色的。
然后为你的背景做一些类似的事情:(记住你不是被迫使用颜色,但你也可以使用drawables)
menu_item_background_selector.xml :
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
android:color="#0094CE">
</item>
<item android:state_pressed="true"
android:color="#0094CE">
</item>
<item android:state_pressed="false"
android:color="#ACD52B">
</item>
</selector>
此处,选中时背景为蓝色,未选中时为绿色。
我缺少的主要元素是android:state_activated
. 确实(太多)状态:激活,按下,聚焦,检查,选择......
我不确定我给出的示例是否是最好android:state_activated
和android:state_pressed
最干净的示例,但它似乎对我有用。
但是我不需要创建自己的类来获得自定义 CheckableRelativeLayout(这很脏而且很可怕),也不需要使用 CheckableTextViews。我不知道为什么其他人使用这种方法,这可能取决于 Api 级别。