.setBackgroundColor()不在click事件之外工作

时间:2012-07-16 02:56:59

标签: java android events view

我有一个看似简单的问题。我正在使用一个在scrollview内部的一个linearlayout中的图像按钮。我为其中一个按钮设置了一个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");
                }

            }

        });

这是另一种方法Log只打印出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");
        }

    }
}

2 个答案:

答案 0 :(得分:0)

1。首先不要使用"=="`` to compare Objects, use。equals()`。

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

答案 1 :(得分:0)

问题似乎在于线程化。您无法在UI线程外更新UI。案例结束:)我稍后会链接一些关于主题的文档。