0

我设置了事件监听器,例如:setOnClickListenerlike this

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

如果未按下按钮,我想将此侦听器设置为 10 秒的超时事件。用例:我button1激活了这个stopBtn监听器 10 秒,如果超时,它会被停用,我需要按下button1才能stopBtn再次激活。

我可能做错了:

    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 秒后我仍然可以单击它,这可能是因为事件侦听器仍然附加。即使我不知道它是否被解雇,我该如何分离它。

4

2 回答 2

1

在 Handler 上发布的延迟 Runnable可以管理:

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

您可以使用以下代码将Handler初始化为实例变量:

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

可以使用Handler来安排延迟的操作。具体检查 2 种方法:postAtTime(Runnable, long)postDelayed(Runnable, long)

创建一个 很容易Handler,只需Handler handler = new Handler()Activity.onCreate(Bundle state). 然后将您想要的操作包装成 aRunnable并传递给处理程序。

于 2012-06-19T08:38:09.257 回答