问题
I have a listview which is customized to display an image and 2 textview. I just simply wanted to highlight one of the item from my list.
Firstly, I go with setSelection method of listview which i finally found out it is not the way as it is not working in touch mode.
So, I do some searching and found that I'd need to use setItemChecked method. Thus, I make a state-list color.
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@color/checkbox_bg_fcs" />
<item android:drawable="@color/WHITE" />
</selector>
I used it to set background color of my customized list item.
From List activity, I call setItemChecked(position,true) to a specific index of my listview.
Unfortunately, it doesn't seem to work for me. Is there anything missing? Anyone got luck with it?
Note**, I did retrieve data for list view from network. I do setItemChecked only after i have data in my listview.
My listview is in single choice mode too.
回答1:
I'm afraid that it is no easy way to do that in the Android Framework.
In order to get the setSelection(...) working, your View has to implement the follogin interface: android.widget.Checkable
You probably are using a some layout for View (an image and 2 textview in a LinearLayout maybe?), which doesn't implement the Checkable interface.
What you can do, is to create a custom View class which implements Checkable.
Check out the link below for a checkable LinearLayout:
http://tokudu.com/2010/android-checkable-linear-layout/
If you want to change the background, than rewrite the setChecked method to do what you want. Very simple example:
@Override
public void setChecked(boolean checked) {
if (checked) {
this.setBackgroundColor(Color.RED);
} else {
setBackgroundColor(Color.BLACK);
}
}
回答2:
set for your list row background selector, which has resource for state_activated:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:state_enabled="true" android:drawable="@android:color/black"></item>
<item android:drawable="@android:color/transparent" android:state_enabled="true"/>
</selector>
回答3:
try including the android:state_enabled
attribute as well.
来源:https://stackoverflow.com/questions/7384505/setitemchecked-int-position-boolean-value-not-working