Android中事件侦听器的超时检测

时间:2012-06-19 08:28:15

标签: java android timeout

我设置了事件监听器,例如:setOnClickListener就像这样

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

如果未按下按钮,我想在10s上设置此侦听器超时事件。使用案例:我有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秒后,我仍然可以点击它,这可能是cos事件监听器仍然附加。即使我不知道它是否被解雇,我怎么能脱离它。

2 个答案:

答案 0 :(得分:1)

Handler上发布的delayed 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();

答案 1 :(得分:1)

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

创建Handler很容易,只需在Handler handler = new Handler()中使用其默认构造函数Activity.onCreate(Bundle state)即可。然后将您想要的操作包装到Runnable并传递给处理程序。