可以为ListView的cacheColorHint设置选择器吗?

时间:2013-01-17 21:32:48

标签: android listview android-listview selector drawable

我想将一个选择器设置为ListView的colorCacheHint:

<ListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:cacheColorHint="@color/selector_background" />

但是引用它作为缓存颜色提示没有任何效果。

根据ListView的状态,是否无法更改cacheColorHint?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

我不相信你可以有一个用于缓存颜色提示的选择器。这究竟是什么 不同的国家是?对于单个项目具有状态是有意义的,例如压缩,聚焦等,但为什么这对ListView本身有意义?

修改

据推测,您希望基于某些自己的(域)逻辑切换事物的外观,而不是让UI更改取决于定义选择器时使用的预定义状态。换句话说,如果您使用选择器作为缓存颜色提示,您希望使用哪个状态? android:state_pressed,android:state_focused,android:state_hovered,android:state_selected等?我认为您需要根据您的逻辑直接设置缓存颜色提示:

int cacheColorRes = myState == foo? R.drawable.something : R.drawable.somethingElse;
mView.setCacheColorHint(cacheColorRes)

答案 1 :(得分:0)

我最终没有通过源代码,但我在经验上同意@LuxuryMode,它确实无法将缓存颜色提示设置为选择器。

我最终将此添加到我的自定义视图的refreshDrawableState。诀窍是getColorStateListgetColorForState的组合,允许您从选择器应用正确的颜色。

    ColorStateList listBackground = view.getContext().getResources().getColorStateList(R.color.list_background);
    int color = listBackground.getColorForState(view.getDrawableState(),listBackground.getDefaultColor());

    try {
        view.setCacheColorHint(color);
    } catch (IndexOutOfBoundsException e) {
        //Early versions of Android have a bug in setCacheColorHint
        // http://code.google.com/p/android/issues/detail?id=12840
    }