0

私はアプリを作成し、ハンドラーを使用しています。クラスAでは、テキスト付きのいくつかのボタンが表示され、次に使用します

handler.postDelayed(new Runnable(){@Override public void run() {blankbutton();}}, 10000); 

10 秒を過ぎるとボタンのテキストが消去されるようにします。

ただし、この時点でユーザーが (別のクラスで) リセット ボタンを押すと、たとえば、ハンドラーが時間をカウントしてから 3 秒後に、リセットを押してから 7 秒後にボタンのテキストが消去されます。ハンドラは停止しません。

別のクラス (リセット クラス) でハンドラーを停止するにはどうすればよいですか? 同様の質問をいくつか確認しましたが、これに対する答えは

handler.removeCallbacks(Runnable);

ただし、リセットクラスの下には「Runnable cannot be resolved to a variable」と表示されます

どうもありがとう!!

4

1 に答える 1

2

あなたの問題は、匿名の内部 Runnable オブジェクトを作成していることです。コールバックを削除しようとしているときに、それを参照する方法がありません。次のようなものが機能します。

Runnable txtClearRun = new Runnable(){
  public void run() {
    blankbutton();
  }
};
handler.postDelayed(txtClearRun, 10* 1000);
.
.
.
handler.removeCallbacks(txtClearRun);

違いは、このように実行可能なオブジェクトを変数に割り当てているtxtClearRunため、後でそれを渡したいときに参照する方法があることです。removeCallbacks();

于 2012-12-16T17:40:05.920 に答える