一見単純な問題があります。スクロールビュー内にあるリニアレイアウト内でイメージボタンを使用しています。ボタンの 1 つに 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");
}
}
}