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() 时,您指的是初始处理程序而不是新实例