这是我的列表视图
<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并选择偶数或奇数行时,没有任何反应。根据我的回答,有人知道为什么以及正确的做法是什么。
答案 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);
}
}
}
}
}