0

ユーザーが状態をCheckedに変更した後、 CheckBoxの背景を変更しようとしています。以下のコードはうまく機能しません。チェックボックスをオフにすると、状態と色が青に変わります。もう一度クリックしてチェックを外すと、色は赤ではなく青のままになります。私はinvalidate()の呼び出しを成功せずに導入しました。メソッドがクリックを受信し、チェックされたステータスを正しく表示することを確認しましたが、私が行ったステートメントが1回だけ機能するようです。

XML

<CheckBox
    android:id="@+id/chkLargeIcons"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="20"
    android:onClick="handleCheckBoxClick" />

コード

public void handleCheckBoxClick(View view) {
    CheckBox tmpChkBox = (CheckBox) findViewById(view.getId());
    if(tmpChkBox.isChecked())
    {
        tmpChkBox.setBackgroundColor(color.blue);
    }
    else
    {
        tmpChkBox.setBackgroundColor(color.red);
    }

    System.out.println(view.getId() + " " + tmpChkBox.isChecked());

    switch (view.getId()) {
    case R.id.chkLargeIcons:
        ...     
    break;
        ...
    }
    ...
}

コードを希望どおりに機能させるには、コードを何に変更する必要がありますか?

ヘルプや提案を事前に感謝します。

4

2 に答える 2

0

最初に、不明な点の 1 つの説明

私のコードで言及されている色の例は、誰かが私が Android Colorクラスを使用していると仮定すると誤解を招く可能性があるということです。color.xmlに保存されている赤のバージョンの色を使用していたので、コードでそれらをColor.REDではなくcolor.redとして記述しました。

したがって、私のコードは他の回答のリスナーコードと同じです。色がAndroidクラスから取得されると仮定すると、両方とも有効です。

私の問題の原因は、いくつかの奇妙なグリッチ、または次のコードの動作に問題を引き起こす Android の動作を認識していないことです。

public void handleCheckBoxClick(View view) {
    CheckBox tmpChkBox = (CheckBox) findViewById(view.getId());
    if(tmpChkBox.isChecked())
    {
        tmpChkBox.setBackgroundColor(color.blue);
    }
    else
    {
        tmpChkBox.setBackgroundColor(color.red);
    }
}

まさにこのようなライン

    tmpChkBox.setBackgroundColor([ColorFromResources]);

コードを実行すると、色の変化が 1 回だけ発生しましたが、その後はそのままで、完全に応答しませんでした。この 1 つの変更が誤解を招きやすく、長い間この問題に悩まされ、後で修正するために放置することさえありました。さらに調査した結果、コードを次のように変更すると問題が解決することがわかりました。

   tmpChkBox.setBackgroundColor(getResources().getColor([ColorFromResources]));

今ではすべてが魅力のように機能します。しかし、リソースからの色の呼び出しがgetResources().getColor(...)なしで機能するのはなぜなのか、まだ困惑しています。うまくいけば、その答えが私のように奇妙に立ち往生している誰かを助けるでしょう.

于 2013-03-14T12:16:21.287 に答える