.setBackgroundColor () не работает вне события клика

1

У меня есть, казалось бы, простая проблема. Я работаю с кнопками изображения внутри линейного вывода, находящегося внутри прокрутки. Я установил onClickListener для одной из кнопок, которая переключает цвет в красный, затем прозрачный, а затем обратно. Я попытался вызвать функцию performClick() и вручную закодировать рутину для запуска при выполнении условия. Проблема, с которой я сталкиваюсь, неважно, как я пытаюсь это сделать, метод (ы), вызывающие.setBackgroundColor(), все выходят, когда он вызывает. Я даже не вижу отчета о возврате в моем журнале. вот код. Я уверен, что это простое решение, но я не очень хорошо знаком с этими вещами. Кроме того, я не использую какой-либо 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");
        }

    }
}
  • 0
    if (id == "Fireball") : никогда не сравнивайте строки с == . Вместо этого используйте equals() .
  • 0
    Спасибо, это то, о чем я полностью забыл. Тем не менее, сравнение проходит, и это не то, что мешает запуску setbackgroundcolor ().
Теги:
view
events

2 ответа

0

Похоже, что проблема кроется в нарезке. Вы не можете обновлять пользовательский интерфейс вне потока пользовательского интерфейса. Дело закрыто :) Я свяжу некоторую документацию по теме позже.

0

1. Сначала никогда не используйте "=="'' to compare Objects, use.equals() '.

2. Вы не вызываете метод resetButton() из onClick(), как этот метод будет вызываться, если его не вызывать.

  • 0
    это часть пользовательского интерфейса для игры. В моем методе обновления запущен поток для одного из моих классов, который спрашивает, готов ли я переключить кнопку назад, а затем вызывает AbilityWidget.resetButton ("Fireball"). Я также из-за пределов класса AbilityWidget и внутри пытался использовать executeClick (), это вызывает ту же проблему. спасибо за == vs .equals (), я уже сделал это изменение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню