0

たとえば、イベントリスナーを設定しますsetOnClickListener

    Button stopBtn = (Button)findViewById(R.id.stop);
    stopBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            doMagic();
        }
    });

ボタンが押されていない場合、このリスナーを10秒のタイムアウトイベントに設定したいと思います。ユースケース:button1このstopBtnリスナーを10秒間アクティブにし、タイムアウトになると非アクティブになり、を押しbutton1stopBtn再度アクティブにする必要があります。

私はおそらくそれを間違っています:

    final Handler myHandler = new Handler();
    startBtn = (Button)findViewById(R.id.start);
    myHandler.postDelayed(new Runnable() {
        public void run() {
            startBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i(TAG,"runned");
                }
            });
        }
    }, 10000);

10秒経ってもまだクリックできますが、おそらくcosイベントリスナーがまだ接続されています。発射されたかどうかわからない場合でも、どうすれば切り離すことができますか。

4

2 に答える 2

1

ハンドラーに投稿された遅延Runnableは、次のことを管理できます

myHandler.postDelayed(new Runnable() {
 public void run() {
   if(something happened) {
     // magic work
   } else {
     // turn off the event
   }
 }
, 10000);

次のコードを使用して、ハンドラーをインスタンス変数として初期化できます。

final Handler myHandler = new Handler();
于 2012-06-19T08:32:38.790 に答える
1

遅延アクションは、ハンドラーを使用して調整できます。具体的には、postAtTime(Runnable、long)postDelayed(Runnable、long)の2つのメソッドを確認してください。

を作成するのは簡単です。の中でHandlerデフォルトのコンストラクターを使用するだけです。次に、目的のアクションをにラップして、ハンドラーに渡します。Handler handler = new Handler()Activity.onCreate(Bundle state)Runnable

于 2012-06-19T08:38:09.257 に答える