0

ListView の colorCacheHint としてセレクターを設定したいと思います。

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

ただし、これをキャッシュ カラー ヒントとして参照しても効果はありません。

ListView の状態に応じて cacheColorHint を変更することはできませんか? または、何か不足していますか?

4

2 に答える 2

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
    }
于 2013-02-05T22:28:01.483 に答える
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)
于 2013-01-17T21:37:18.263 に答える