Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:如何启动和停止定时器触发的循环?_Java_Android_User Interface_Handler_Runnable - Fatal编程技术网

Java 安卓:如何启动和停止定时器触发的循环?

Java 安卓:如何启动和停止定时器触发的循环?,java,android,user-interface,handler,runnable,Java,Android,User Interface,Handler,Runnable,我的GUI中有两个按钮。“一圈”和“自动播放”。我希望自动播放按钮开始自动按下计时器上的一个旋转按钮,我最终会用滑块或其他东西来控制它的速度。但是,我希望这样,当我再次按下自动播放按钮时,它会停止自动激活第一个按钮。自动播放工作,但停止自动播放不工作,我不知道如何停止它。也许我使用了完全错误的解决方案,或者我只是不知道如何正确地停止runnable?任何帮助都将不胜感激,我已经做了很多搜索,没有发现任何太有用的东西。我的点击自动播放代码如下: public void autoClick(fina

我的GUI中有两个按钮。“一圈”和“自动播放”。我希望自动播放按钮开始自动按下计时器上的一个旋转按钮,我最终会用滑块或其他东西来控制它的速度。但是,我希望这样,当我再次按下自动播放按钮时,它会停止自动激活第一个按钮。自动播放工作,但停止自动播放不工作,我不知道如何停止它。也许我使用了完全错误的解决方案,或者我只是不知道如何正确地停止runnable?任何帮助都将不胜感激,我已经做了很多搜索,没有发现任何太有用的东西。我的点击自动播放代码如下:

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);
    }
}
这是一张照片


提前感谢您的时间。

请尝试将
处理程序。removeCallbacks(null)
更改为
处理程序。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=newhandler();//刚刚注意到这可能也是由引用引起的,请尝试编辑后的解决方案。我没有足够的声誉来投票支持这一点,但你解决了它!现在我责备自己没有意识到我每次单击都在创建一个新的处理程序。非常感谢你的帮助。很高兴帮助你。也许你可以为我将此标记为正确答案?无论如何,谢谢