至少有一天,我一直在努力解决这个问题,在互联网上搜索但没有解决方案对我有用,我一直试图理解它为什么会发生,以及如何以正确的方式解决它。
问题: 当它被“检查”时,我无法更改行背景颜色/ drawable,我知道它何时被检查,因为我的根元素实现了 Checked 接口。
我不知道设置ListView的属性 android:listSelector 和我的行根元素的 android:background 属性(CheckableLinearLayout)之间的区别。
Android将使用哪个属性选择器并应用我的背景?因为直到现在它们都没有工作,它总是透明的。
在某些情况下,当我点击列表项时,项目变为红色,然后变回透明,方法 onCreateDrawableState 永远不会被真正调用,我认为它可能是相关的。
我的情景:
API 10(2.3.3)
使用扩展ArrayAdapter的自定义适配器的ListView的一个Activity。 我的ListView行资源根元素:
<com.company.views.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:orientation="horizontal">
...
CheckableLinearLayout :
public class CheckableLinearLayout extends LinearLayout implements Checkable {
private static final int[] STATE_CHECKED = {android.R.attr.state_checked};
@Override
protected int[] onCreateDrawableState(int extraSpace)
{
...
int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked())
mergeDrawableStates(drawableState, STATE_CHECKED);
return drawableState;
}
...
}
我的选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<shape>
<solid android:color="@color/solid_blue" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/solid_red" />
</shape>
</item>
</selector>
我甚至尝试使用空选择器将背景设置为红色,但仍然,我的行会变为红色。
非常感谢任何帮助!
谢谢!
答案 0 :(得分:0)
没关系,上面的代码是对的,我发现在之前的代码的另一个地方我尝试将列表项背景设置为透明。
删除该代码后,我将listview listSelector设置为透明选择器(以删除橙色选择背景)。
然后将CheckableLinearLayout背景设置为上面的选择器。
之后,我的onCreateDrawableState被正常调用,背景随选择器中的指定而变化。
就是这样!