如何检测按钮上的点击,同时由 postDelayed Handler 引起的延迟
How to detect taps on a button whilst a delay caused by postDelayed Handler
我想解决过去几天我一直在尝试解决的问题,但我没有那么多经验,而且我在其他地方找不到解决方案。
反正,
在我的应用程序中,我有一个按钮,我在其中实现了 onClickClistener 以响应触摸,并且在其中添加了一个处理程序,该处理程序增加了延迟,然后执行了一些代码。我的问题是我想在延迟发生时检测按钮的任何点击,而 postDelyed 函数不允许我这样做。我该怎么做呢?
我已经发布了与此相关的代码。
提前致谢!
P.S(我不介意不用这个 postDelayed 东西。)
Button button = findViewById(R.id.myButtonId);
button.setOnClickListener(new View.OnClickListener){
@Override
public void onClick(View v) {
.......
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do some thing after the delay
}
}, randomDelay);
//Do other things
}
});
boolean previousTapDetected;
...
button.setOnClickListener(new View.OnClickListener){
@Override
public void onClick(View v) {
.......
if(previousTapDetected) {
//We got a tap during the delay
}
Handler handler = new Handler();
previousTapDetected = true;
handler.postDelayed(new Runnable() {
@Override
public void run() {
previousTapDetected = false;
//Do some thing after the delay
}
}, randomDelay);
//Do other things
}
});
我想解决过去几天我一直在尝试解决的问题,但我没有那么多经验,而且我在其他地方找不到解决方案。 反正, 在我的应用程序中,我有一个按钮,我在其中实现了 onClickClistener 以响应触摸,并且在其中添加了一个处理程序,该处理程序增加了延迟,然后执行了一些代码。我的问题是我想在延迟发生时检测按钮的任何点击,而 postDelyed 函数不允许我这样做。我该怎么做呢? 我已经发布了与此相关的代码。 提前致谢!
P.S(我不介意不用这个 postDelayed 东西。)
Button button = findViewById(R.id.myButtonId);
button.setOnClickListener(new View.OnClickListener){
@Override
public void onClick(View v) {
.......
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do some thing after the delay
}
}, randomDelay);
//Do other things
}
});
boolean previousTapDetected;
...
button.setOnClickListener(new View.OnClickListener){
@Override
public void onClick(View v) {
.......
if(previousTapDetected) {
//We got a tap during the delay
}
Handler handler = new Handler();
previousTapDetected = true;
handler.postDelayed(new Runnable() {
@Override
public void run() {
previousTapDetected = false;
//Do some thing after the delay
}
}, randomDelay);
//Do other things
}
});