CheckableLinearLayout背景确实随后台选择器而变化

时间:2013-03-14 20:29:43

标签: android listview selector android-linearlayout

至少有一天,我一直在努力解决这个问题,在互联网上搜索但没有解决方案对我有用,我一直试图理解它为什么会发生,以及如何以正确的方式解决它。

问题: 当它被“检查”时,我无法更改行背景颜色/ 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>

我甚至尝试使用空选择器将背景设置为红色,但仍然,我的行会变为红色。

非常感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

没关系,上面的代码是对的,我发现在之前的代码的另一个地方我尝试将列表项背景设置为透明。

删除该代码后,我将listview listSelector设置为透明选择器(以删除橙色选择背景)。

然后将CheckableLinearLayout背景设置为上面的选择器。

之后,我的onCreateDrawableState被正常调用,背景随选择器中的指定而变化。

就是这样!