Java 安卓:如何启动和停止定时器触发的循环?
我的GUI中有两个按钮。“一圈”和“自动播放”。我希望自动播放按钮开始自动按下计时器上的一个旋转按钮,我最终会用滑块或其他东西来控制它的速度。但是,我希望这样,当我再次按下自动播放按钮时,它会停止自动激活第一个按钮。自动播放工作,但停止自动播放不工作,我不知道如何停止它。也许我使用了完全错误的解决方案,或者我只是不知道如何正确地停止runnable?任何帮助都将不胜感激,我已经做了很多搜索,没有发现任何太有用的东西。我的点击自动播放代码如下:Java 安卓:如何启动和停止定时器触发的循环?,java,android,user-interface,handler,runnable,Java,Android,User Interface,Handler,Runnable,我的GUI中有两个按钮。“一圈”和“自动播放”。我希望自动播放按钮开始自动按下计时器上的一个旋转按钮,我最终会用滑块或其他东西来控制它的速度。但是,我希望这样,当我再次按下自动播放按钮时,它会停止自动激活第一个按钮。自动播放工作,但停止自动播放不工作,我不知道如何停止它。也许我使用了完全错误的解决方案,或者我只是不知道如何正确地停止runnable?任何帮助都将不胜感激,我已经做了很多搜索,没有发现任何太有用的东西。我的点击自动播放代码如下: public void autoClick(fina
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();//刚刚注意到这可能也是由引用引起的,请尝试编辑后的解决方案。我没有足够的声誉来投票支持这一点,但你解决了它!现在我责备自己没有意识到我每次单击都在创建一个新的处理程序。非常感谢你的帮助。很高兴帮助你。也许你可以为我将此标记为正确答案?无论如何,谢谢