0

ivこの問題に少なくとも1日は苦労しており、インターネットで検索しましたが、解決策がありませんでした.なぜそれが起こるのか、そしてそれを正しい方法で修正する方法を理解しようとしていました.

問題: 行の背景色/ドローアブルが「チェック」されているときに変更できませんでした。ルート要素がCheckedインターフェイスを実装しているため、いつチェックされるかがわかります。

ListViewのプロパティandroid:listSelectorの設定と、行ルート要素 (CheckableLinearLayout)のandroid:backgroundプロパティの設定の違いがわかりません。

Android がセレクターを使用して背景を適用するプロパティは何ですか? それらのどれも今まで機能していないため、常に透過的です。

場合によっては、リスト項目をタップすると、項目が赤くなり、透明に戻ります。また、メソッドonCreateDrawableStateが実際に呼び出されることはありません。関連している可能性があると思います。

私のシナリオ:

API 10 (2.3.3)

ArrayAdapter を拡張するカスタム アダプターを使用する ListView を持つ 1 つのアクティビティ。私の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>

背景を赤に設定する空のセレクターを使用しようとしましたが、それでも私の行は赤くなりません。

どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

0

気にしないでください。上記のコードは正しいです。コードの別の場所での以前の試みで、リスト項目の背景を透明に設定していたことを発見しました。

そのコードを削除した後、リストビュー listSelector を透過セレクターに設定しました (オレンジ色の選択背景を削除するため)。

次に、CheckableLinearLayout の背景を上のセレクターに設定します。

その後、私の onCreateDrawableState が正常に呼び出され、背景がセレクターで指定されたとおりに変更されます。

それでおしまい!

于 2013-03-15T13:47:45.163 に答える