Android: 如何启动和停止在计时器上触发的循环?
Android: How to start and stop a loop that fires on a timer?
我的 GUI 中有两个按钮。 "ONE TURN" 和 "AUTO PLAY"。我希望 AUTO PLAY 按钮开始自动按下计时器上的 ONE TURN 按钮,我最终会用滑块或其他东西控制它的速度。但是,我想要它,以便当我再次按下 AUTO PLAY 按钮时,它会停止自动激活第一个按钮。自动播放有效,但停止自动播放不起作用,我不知道如何停止。也许我完全使用了错误的解决方案,或者我只是不知道如何正确停止运行?任何帮助将不胜感激,我做了很多搜索,但没有发现任何有用的东西。我的点击自动播放代码如下:
public void autoClick(final View view) {
final Handler handler = new Handler();
isAutoPlaying = !isAutoPlaying;
final View dummyView = view;
Runnable runnable = null;
if(isFirstAutoPlayClick) {
runnable = new Runnable() {
@Override
public void run() {
onClick(dummyView);
handler.postDelayed(this, 1000);
}
};
isFirstAutoPlayClick = !isFirstAutoPlayClick;
}
if(isAutoPlaying) {
Toast.makeText(MainActivity.this,"isAutoPlaying is true", Toast.LENGTH_SHORT).show();
handler.post(runnable);
} else {
Toast.makeText(MainActivity.this,"isAutoPlaying is false", Toast.LENGTH_SHORT).show();
handler.removeCallbacks(null);
}
}
这是一张图片
GUI
提前感谢您抽出时间。
尝试将 handler.removeCallbacks(null)
更改为 handler.removeCallbacksAndMessages(null)
看看它是否适合您
编辑
您也需要将处理程序局部变量移动到 class 字段。
public class Activity{
Handler handler = new Handler(); //<-- Put it here
public void autoClick(final View view) {
final Handler handler = new Handler(); //<-- Remove this
...
}
}
因此,当调用 handler.removeCallbacksAndMessages()
时,您指的是初始处理程序而不是新实例
我的 GUI 中有两个按钮。 "ONE TURN" 和 "AUTO PLAY"。我希望 AUTO PLAY 按钮开始自动按下计时器上的 ONE TURN 按钮,我最终会用滑块或其他东西控制它的速度。但是,我想要它,以便当我再次按下 AUTO PLAY 按钮时,它会停止自动激活第一个按钮。自动播放有效,但停止自动播放不起作用,我不知道如何停止。也许我完全使用了错误的解决方案,或者我只是不知道如何正确停止运行?任何帮助将不胜感激,我做了很多搜索,但没有发现任何有用的东西。我的点击自动播放代码如下:
public void autoClick(final View view) {
final Handler handler = new Handler();
isAutoPlaying = !isAutoPlaying;
final View dummyView = view;
Runnable runnable = null;
if(isFirstAutoPlayClick) {
runnable = new Runnable() {
@Override
public void run() {
onClick(dummyView);
handler.postDelayed(this, 1000);
}
};
isFirstAutoPlayClick = !isFirstAutoPlayClick;
}
if(isAutoPlaying) {
Toast.makeText(MainActivity.this,"isAutoPlaying is true", Toast.LENGTH_SHORT).show();
handler.post(runnable);
} else {
Toast.makeText(MainActivity.this,"isAutoPlaying is false", Toast.LENGTH_SHORT).show();
handler.removeCallbacks(null);
}
}
这是一张图片 GUI
提前感谢您抽出时间。
尝试将 handler.removeCallbacks(null)
更改为 handler.removeCallbacksAndMessages(null)
看看它是否适合您
编辑 您也需要将处理程序局部变量移动到 class 字段。
public class Activity{
Handler handler = new Handler(); //<-- Put it here
public void autoClick(final View view) {
final Handler handler = new Handler(); //<-- Remove this
...
}
}
因此,当调用 handler.removeCallbacksAndMessages()
时,您指的是初始处理程序而不是新实例