У меня есть, казалось бы, простая проблема. Я работаю с кнопками изображения внутри линейного вывода, находящегося внутри прокрутки. Я установил 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");
}
}
}
Похоже, что проблема кроется в нарезке. Вы не можете обновлять пользовательский интерфейс вне потока пользовательского интерфейса. Дело закрыто :) Я свяжу некоторую документацию по теме позже.
1. Сначала никогда не используйте "=="'' to compare Objects, use
.equals() '.
2. Вы не вызываете метод resetButton()
из onClick()
, как этот метод будет вызываться, если его не вызывать.
if (id == "Fireball")
: никогда не сравнивайте строки с==
. Вместо этого используйтеequals()
.