我的GUI中有两个按钮。 “一转”和“自动播放”。我希望“自动播放”按钮开始自动按下计时器上的“一转”按钮,我最终将使用滑块或其他东西控制它的速度。但是,我想要它,以便当我再次按下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)看看它是否对您有用

编辑
您还需要将处理程序局部变量移动到类字段。

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

09-04 18:31
查看更多