Android 4.0.3 を対象とする私のアプリでは、スイッチとして機能するボタンを使用していました。ボタンをクリックするとリソースが変更され (再生/一時停止の切り替え)、一部のタスクがバックグラウンドで実行されていました。特徴は、ボタンが押されたときに、トグルを短時間使用できないようにしたかったことです (素早い切り替えを防ぐため)。
そのために、次のように X 秒間待機するスレッドを作成しました。
void blockButton(){
new Thread() {
public void run(){
try {
synchronized(this){
button_ready = false;
sleep(5000);
button_ready = true;
}
}
catch(InterruptedException ex){}
}
}.start();
}
}
そして基本的に私のActivity/onClickListenerで
if(button_ready){
// Start background stuff
changeButtonResource();
button.setEnabled(false);
blockButton();
button.setEnabled(true);
}
これまでのところ、すべてが順調に進んでいました。しかし、最終的にはSwitchにアップデートしたいと思いました。コードはほとんど同じです (onClickListener が OnCheckedChangeListener に変わることを除いて)。
しかし、ボタンを1回クリックすると、もう一度クリックするとリソースを変更できますが、バックグラウンドタスクは開始されません(すでにバイブレーターなどで試しましたが、リソースのみが変更されます)。
そのため、ボタンの動作はほとんど同じですが、リソースが台無しになります。どんなアイデアでも大歓迎です!ありがとう。