我设置了事件侦听器,例如: 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
中并传递给处理程序。