以下是想要编程选择ListView项目并使其保持高亮的所有人:
-编程选择ListView中的一个项目
-使该项目保持高亮
我正在使用Android ICS,不知道是否适用于所有级别的API。
首先创建一个ListView(或者如果您已经在ListActivity/ListFragment中,则获取它)
然后通过以下方式将listview的选择模式设置为单个:Mylistview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
然后使用以下代码编程选择您的项目:Mylistview.setItemChecked(position, true);
(其中position是指要选择的项的排名整数)
现在您的项目实际上已被选择,但您可能什么也看不到,因为没有选择的视觉反馈。现在您有两个选择:您可以使用预构建的listview或自定义的listview。
1) 如果您想要预构建的listview,请尝试使用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))
根据您选择的预构建listview,您现在会看到在选择时复选框被选中或背景颜色更改等...
2) 如果您使用自定义listview,则需要定义一个将在每个项目中使用的自定义布局。在此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" />
现在,在drawable文件夹中创建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>
当被选中时,文本将变为白色。
接下来对背景做类似的操作:(记住你不必使用颜色,也可以使用drawable)
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
。确实有(太)多种状态:activated、pressed、focused、checked、selected......
我不确定我提供的android:state_activated
和android:state_pressed
示例是否是最佳且最清晰的,但它似乎对我有效。
但是我不需要创建自己的类来获得一个自定义的CheckableRelativeLayout(这很不清真),也没有使用CheckableTextViews。我不知道其他人为什么要使用这样的方法,可能取决于API级别。