ListView奇数偶数行xml

时间:2013-07-05 10:02:31

标签: android android-listview android-xml

这是我的列表视图

<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>

我在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>

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

1 个答案:

答案 0 :(得分: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);
                }
            }
        }
    }
}