Java .setBackgroundColor()在单击事件外部不工作

Java .setBackgroundColor()在单击事件外部不工作,java,android,events,view,Java,Android,Events,View,我有一个看似简单的问题。我正在使用滚动视图中的linearlayout中的imagebuttons。我为其中一个按钮设置了onClickListener,该按钮将颜色切换为红色,然后是透明的,然后再切换回来。我尝试调用performClick()并手动编写一个例程,在满足条件时触发。我遇到的问题是,无论我如何尝试执行此操作,调用.setBackgroundColor()的方法在调用时都会退出。我甚至没有在日志中看到return语句。这是代码。我相信这是一个简单的解决办法,但我不太熟悉这些事情。此

我有一个看似简单的问题。我正在使用滚动视图中的linearlayout中的imagebuttons。我为其中一个按钮设置了onClickListener,该按钮将颜色切换为红色,然后是透明的,然后再切换回来。我尝试调用performClick()并手动编写一个例程,在满足条件时触发。我遇到的问题是,无论我如何尝试执行此操作,调用.setBackgroundColor()的方法在调用时都会退出。我甚至没有在日志中看到return语句。这是代码。我相信这是一个简单的解决办法,但我不太熟悉这些事情。此外,我不使用任何XML,如果可能的话,我希望避免使用它,所以在发布建议时请记住这一点。提前谢谢

我将努力澄清我想要实现的目标。我试图模拟在没有发生单击事件的情况下在单击事件期间触发的事件。我已经用performClick()和我在这里的方式尝试过了。在这两种情况下,我都有对.setBackgroundColor()的调用,该调用没有触发,并且提前退出了调用它的方法,它被调用了

在混乱了一段时间后,我发现该方法将触发setBackgroundColor(),并在我使用Color.RED时继续该方法,因为它已经是红色了。如果我尝试任何其他颜色,它都不起作用。所以它似乎不想以这种方式改变颜色。有什么想法吗

以下是处理程序:

IBFireBall.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Log.d(TAG, "in onClick");
                if (Fireball.activated) {
                    Fireball.activated = false;
                    AbilityWidget.IBFireBall.setBackgroundColor(0);
                    Log.d(TAG, "was activated");
                } else {
                    Level.fireBall = new Fireball(context);
                    Fireball.activated = true;
                    AbilityWidget.IBFireBall.setBackgroundColor(Color.RED);
                    Log.d(TAG, "wasn't activated");
                }

            }

        });
以下是仅打印出1和2的另一个方法日志:

public static void resetButton(String id) {

    if (id.equals("Fireball")) {

        if (Fireball.activated) {
            Log.d(TAG,"inside resetbutton 1");
            Fireball.activated = false;
            Log.d(TAG,"inside resetbutton2" );
            AbilityWidget.IBFireBall.setBackgroundColor(0);
            Log.d(TAG,"inside resetbutton4" );

        } else {

            Level.fireBall = new Fireball(context);
            Fireball.activated = true;
            AbilityWidget.IBFireBall.setBackgroundColor(Color.RED);
            Log.d(TAG, "wasn't activated");
        }

    }
}

1.首先不要使用
“==”``要比较对象,请使用
.equals()`


2。您没有从
onClick()
调用
resetButton()
方法,如果没有调用该方法,将如何调用该方法。

问题似乎在于线程。不能在UI线程外更新UI。案例结束:)我稍后将链接一些关于这个主题的文档。

如果(id==“Fireball”)
:永远不要将字符串与
==
进行比较。使用
equals()
代替。谢谢你,这是我完全忘记的事情。尽管如此,这种比较仍然存在,但这并不是阻止setbackgroundcolor()启动的原因。这是游戏ui的一部分。在我的一个类的更新方法中运行着一个线程,它询问我是否准备好切换回按钮,然后调用AbilityWidget.resetButton(“Fireball”)。我还从AbilityWidget类外部和内部尝试使用performClick()这会导致相同的问题。谢谢你的==vs.equals(),我已经做了更改。