簡體   English   中英

Android:如何啟動和停止在計時器上觸發的循環?

[英]Android: How to start and stop a loop that fires on a timer?

我的 GUI 中有兩個按鈕。 “一回合”和“自動播放”。 我希望 AUTO PLAY 按鈕開始自動按下計時器上的 ONE TURN 按鈕,我最終將使用 slider 或其他東西來控制它的速度。 但是,我想要這樣當我再次按下自動播放按鈕時,它會停止自動激活第一個按鈕。 自動播放有效,但停止自動播放不起作用,我不知道如何停止。 也許我完全使用了錯誤的解決方案,或者我只是不知道如何正確停止可運行文件? 任何幫助將不勝感激,我已經做了很多搜索,但沒有發現任何有用的東西。 我的點擊代碼自動播放如下:

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()時,您指的是該初始處理程序而不是新實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM