安卓中事件侦听器的超时检测



我设置了事件侦听器,例如: 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 事件侦听器仍然附加。即使我不知道它是否被触发,我怎么能分离它。

在处理程序上发布的延迟 Runnable 可以管理:

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

可以使用以下代码将处理程序初始化为实例变量:

final Handler myHandler = new Handler();

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

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

相关内容

  • 没有找到相关文章

最新更新