簡體   English   中英

在Android中停止多個倒數計時器

[英]Stopping multiple countdown timers in Android

我需要找到一種方法來阻止多個計時器的發生。 我必須有一個帶有可選倒數計時器間隔的彈出菜單。 我找到了可用於創建計時器的解決方案。 但是,如果一個正在運行,而您從菜單中選擇另一個,則它們將一起運行。

我需要弄清楚要添加什么代碼,以便在選擇第二個倒計時選項時,第一個倒數計時器停止運行。

...

@Override
public boolean onMenuItemClick(MenuItem item) {

    switch (item.getItemId()){
        case R.id.countdownMenu1:
            CounterClass timer = new CounterClass(10000, 1000);
            timer.start();
            return true;

        case R.id.countdownMenu2:
            timer = new CounterClass(15000, 1000);
            timer.start();
            return true;

        default:
            return false;
    }
}


public class CounterClass extends CountDownTimer  {

    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onTick(long millisUntilFinished) {

        long millis = millisUntilFinished;
        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
                TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(hms);
        textViewTime.setText(hms);
    }

    @Override
    public void onFinish() {
        // textViewTime.setText("Completed.");
        System.exit(0);
    }
...

只要您不嘗試第二次,從菜單中選擇每次都非常有用。 然后,我將顯示兩個倒數時間,並且先倒數為零會執行onFinish。

private CounterClass timer;

@Override
public boolean onMenuItemClick(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.countdownMenu1:
            startTimer(10000, 1000);
            return true;
        case R.id.countdownMenu2:
            startTimer(15000, 1000);
            return true;
        default:
            return false;
    }
}

public void startTimer(long millisInFuture, long countDownInterval) {
    cancelTimer();
    timer = new CounterClass(millisInFuture, countDownInterval);
    timer.start();
}

private void cancelTimer() {
    if (timer != null) {
        timer.cancel();
    }
}

暫無
暫無

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

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