Can';t更改复选框视图的背景色两次-Android

Can';t更改复选框视图的背景色两次-Android,android,user-interface,view,background,Android,User Interface,View,Background,在用户将其状态更改为选中后,我尝试更改复选框背景。下面的代码工作得不太好。若我点击未选中复选框,它的状态和颜色会变为蓝色,当我再次点击并取消选中时,颜色会保持蓝色而不是变为红色。我确实引入了调用invalidate(),但没有成功。我确认该方法接收点击并正确查看已检查状态,但我所做的if语句似乎只起作用一次 XML <CheckBox android:id="@+id/chkLargeIcons" android:layout_width="0dp" android

在用户将其状态更改为选中后,我尝试更改复选框背景。下面的代码工作得不太好。若我点击未选中复选框,它的状态和颜色会变为蓝色,当我再次点击并取消选中时,颜色会保持蓝色而不是变为红色。我确实引入了调用invalidate(),但没有成功。我确认该方法接收点击并正确查看已检查状态,但我所做的if语句似乎只起作用一次

XML

<CheckBox
    android:id="@+id/chkLargeIcons"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="20"
    android:onClick="handleCheckBoxClick" />
我应该在我的代码中做些什么来让它按我想要的方式工作


提前感谢您的帮助和建议。

要在选中时更改,您需要附加OnCheckChangedListener。然后把上面的代码放在里面

CheckBox tmpChkBox = (CheckBox) findViewById(view.getId());
tmpChkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            buttonView.setBackgroundColor(Color.BLUE);
        } else { 
            buttonView.setBackgroundColor(Color.RED);
        }
    }
 });

首先对一个不清楚的方面作一些解释

问题是,如果有人认为我使用的是androidColor类,那么代码中提到的示例颜色可能会产生误导。当我使用存储在color.xml中的颜色redblue版本时,这就是为什么我在代码中将它们称为color.red而不是color.red

所以我的代码和另一个答案中的侦听器代码一样,如果您假设颜色来自android类,那么这两个代码都是有效的

我的问题的根源是一些奇怪的小故障,或者是我不知道的安卓行为,导致下面的代码工作出现故障

public void handleCheckBoxClick(View view) {
    CheckBox tmpChkBox = (CheckBox) findViewById(view.getId());
    if(tmpChkBox.isChecked())
    {
        tmpChkBox.setBackgroundColor(color.blue);
    }
    else
    {
        tmpChkBox.setBackgroundColor(color.red);
    }
}
正是像这样的线条

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;
        ...
    }
    ...
}
    tmpChkBox.setBackgroundColor([ColorFromResources]);
虽然代码的执行只给了我一次颜色变化的机会,但它仍然是这样,完全没有反应。这一变化在很大程度上是误导性的,让我在这个问题上陷了很长时间,甚至让我把它留给以后解决。 经过进一步的研究,我发现下面的代码更改解决了我的问题:

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

现在一切都像一个符咒。但是我仍然很困惑,为什么在没有getResources().getColor(…)的情况下,从资源调用color会起作用。希望这个答案能帮助像我这样奇怪的人。

你把这个代码放在哪里了?@JustinJasmann我有多个复选框,我为它们指定了相同的“OnClick”方法,这个代码在这个方法中,并且作为System.out.println输出它应该输出的内容,单击一两下复选框后,复选框的视觉状态保持不变。您是否可以发布更多代码以显示您在该侦听器中的绑定位置?@JustinJasmann done,尽管我不知道这与system.out.println正确打印所有与复选框的交互有关,我只是尝试自己复制它。if/else对我来说很好。你在你的交换机/机箱里做什么?它在我的机箱里不工作,不同的是,在勾选和取消勾选后,它的颜色变为蓝色,然后停止工作。另一个关注点——为一个obejct设置多次相同的侦听器是否是一种好的做法,我的方法的代码处理多个复选框并通过id区分它们。