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