setItemChecked (int position, boolean value) not working?

こ雲淡風輕ζ 提交于 2019-12-22 04:42:34

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!