2

我目前有一个 ListView,每行包含一个 Radiobutton 和一个 TextView。ListView 使用自定义适配器,并且我为 ListView 提供了 android:choiceMode="singleChoice" 指令,以确保只能从列表中选择单个元素。但是,我似乎无法突出显示所选项目。

下面是 ListView 的 XML 声明:

<ListView android:id="@+id/employees_list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:paddingLeft="2dp"
                android:paddingRight="1dp"
                android:background="@drawable/borderlist"
                android:choiceMode="singleChoice" 
                android:listSelector="#48ad82"
                android:layout_below="@id/employees_header">
 </ListView>

这是 ListView 行的 XML 声明:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row_employee"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:paddingTop="13dp"
    android:paddingBottom="13dp"
    android:descendantFocusability="blocksDescendants">

    <RadioButton android:id="@+id/radio_employee"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:focusable="false"/>

    <TextView
        android:id="@+id/text_employeename"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_toRightOf="@id/radio_employee"
        android:layout_marginTop="3dp"
        android:layout_marginLeft="5dp"
        android:focusable="false" />

</RelativeLayout> 

由于我想交替行的颜色,我通过编程在每一行上设置了一个选择器,我在自定义适配器的 getView 中有这段代码:

// Alternate row colors.
    if (position % 2 == 0) {
            v.setBackgroundResource(R.drawable.selector_list1);
        } else {
            v.setBackgroundResource(R.drawable.selector_list2);
    }

这是 selector_list1 的 XML 声明,selector_list2 是相同的,除了第一个可绘制对象:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="false" android:state_pressed="false"  android:drawable="@color/white" />
    <item android:state_pressed="true" android:drawable="@color/lightgreen_listpressed" />
    <item android:state_selected="true" android:state_pressed="false"  android:drawable="@color/lightgreen_listpressed" />
</selector>

State_pressed 有效,但我尝试使用 state_activated、state_selected、state_enabled、state_checked,但没有任何效果可以更改所选列表项的颜色。难道我做错了什么?

编辑 1:如果我只是将我的选择器扔出窗口(IE 不使用它们),选择着色仅适用于我在 ListView 声明中的 android:listSelector="#48ad82" 指令。为什么这不适用于选择器?

编辑 2:再次尝试所有不同的状态,包括完全删除 listSelector 指令时的 state_focused 。仍然没有结果。

编辑 3:我想问题是 ListView 本身允许选择,RelativeLayout 视图永远不会真正被“选中”,因此在它上面设置选择器是没用的。如果是这种情况,我应该在哪里以及如何设置选择器以让他们做我想让他们做的事情?

编辑 4:我尝试根据本教程在适配器上设置颜色:http: //eureka.ykyuen.info/2010/03/15/android-%E2%80%93-applying-alternate-row-color-in- listview-with-simpleadapter/没有结果,除非我调用 android:drawSelectorOnTop="true" 来隐藏 ListView 元素中的所有元素,否则我仍然没有得到任何选择颜色。

编辑 5:我现在要放弃这个,完全删除交替的颜色。我在 StackOverflow 或 Google 上找到的任何解释都没有谈到这个问题。使这个“工作”的唯一方法是调用 android:drawSelectorOnTop="true",它确实改变了当前在 ListView 中选择的元素的颜色,但是,它隐藏了该行中的所有内容。

4

0 回答 0