【问题标题】:How do you cancel CountDownTimer?你如何取消倒计时?
【发布时间】:2012-06-05 21:04:09
【问题描述】:

我有一个带有倒数计时器的 AlertDialog,我有一个取消按钮设置,它取消了对话框,但计时器继续运行!有谁知道如何取消倒数计时器的倒计时?任何帮助将不胜感激!

   private void timerDialog() {
    timerDialog = new AlertDialog.Builder(this).create();  
    timerDialog.setTitle("Timer");  
    timerDialog.setMessage("Seconds Remaining: "+timerNum*1000);
    timerDialog.setCancelable(false);
    timerDialog.setButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface aboutDialog, int id) {
           timerDialog.cancel();
        }
    });
    timerDialog.show();
    new CountDownTimer(timerNum*1000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            timerDialog.setMessage("Seconds Remaining: "+ (millisUntilFinished/1000));
        }

        @Override
        public void onFinish() {
            Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            v.vibrate(500);
            timerDialog.cancel();
        }
    }.start();

}

【问题讨论】:

    标签: java android timer


    【解决方案1】:

    您似乎在对话框上调用取消,但从未在计时器上调用。您需要维护对 CountDownTimer 的引用,并在 onClick 方法中调用其取消方法。

    private void timerDialog() {
        final CountDownTimer timer = new CountDownTimer(timerNum*1000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                timerDialog.setMessage("Seconds Remaining: "+ (millisUntilFinished/1000));
            }
    
            @Override
            public void onFinish() {
                Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                v.vibrate(500);
                timerDialog.cancel();
            }
        };
        timerDialog = new AlertDialog.Builder(this).create();  
        timerDialog.setTitle("Timer");  
        timerDialog.setMessage("Seconds Remaining: "+timerNum*1000);
        timerDialog.setCancelable(false);
        timerDialog.setButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface aboutDialog, int id) {
               timer.cancel();
            }
        });
        timerDialog.show();
        timer.start();
    }
    

    【讨论】:

      【解决方案2】:

      在 CountDownTimer 上调用cancel() 方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-11
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 2020-11-30
        相关资源
        最近更新 更多