1

这是我的列表视图

<ListView
        android:id="@+id/lvRMultiple"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="52"
        android:divider="@color/white"
        android:scrollingCache="false" >

    </ListView>

我将列表视图中的行背景设置为偶数和奇数,如下所示:

/*
 * CHANGE ROW COLOR 0 WHITE 1 GRAY
 */

if ( position % 2 == 0) //0 even 1 odd..
      vi.setBackgroundResource(R.drawable.listview_selector_odd);

    else
      vi.setBackgroundResource(R.drawable.listview_selector_even);

现在,当我选择偶数行或奇数行时,我希望背景资源发生变化。

所以在 listview_selector_odd.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/odd_row" android:state_enabled="true"/>

    <item android:drawable="@drawable/ic_launcher" android:state_pressed="false"/>


</selector>

和 listview_selector_even.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/air_deezeer_row" android:state_enabled="true"/>

    <item android:drawable="@drawable/even_row" android:state_pressed="false"/>

</selector>

当我在设备上运行我的列表视图并选择偶数行或奇数行时,没有任何反应。根据我的回答,有人知道为什么以及正确的方法是什么。

4

1 回答 1

0

我不认为选择器对您的情况来说是一个不错的选择。当然,您可以使用选择器使其在按下时改变颜色。您的选择器将如下所示

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_selected="true"
        android:drawable="@color/odd_pressed_color"/>
    <item
        android:drawable="@color/odd_default_color" />
</selector>

但是每个选择器行都不知道其他行。如果您希望每次只选择一个项目,则需要迭代其他剩余的行视图并将它们恢复为默认颜色。最好将此检查放在您的项目 onclicklistener 中:

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

        for (int i = 0; i < parent.getCount(); i++) {
            if(i != position) {
                if ( i % 2 == 1) {//0 even 1 odd..
                    parent.getChildAt(i).setBackgroundResource(R.drawable.odd_default_color);
                else {
                    parent.getChildAt(i).setBackgroundResource(R.drawable.even_default_color);
                }
            }
        }
    }
}
于 2013-07-05T10:49:05.920 回答