我设置了事件监听器,例如: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事件监听器仍然附加。即使我不知道它是否被解雇,我怎么能脱离它。
答案 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
并传递给处理程序。