繁体   English   中英

使用按钮启动和停止CountDownTimer的问题

[英]Problems with starting and stopping CountDownTimer with buttons

我有一个用于输入以分钟为单位的时间的编辑文本,一个用于使用在更新文本视图的编辑文本中输入的分钟来启动倒数计时器的按钮,以及一个我想在倒数计时器结束之前取消的按钮。

我遇到的问题是...倒数计时器所需的变量(毫秒)无法分配,直到我单击开始计时器按钮,因为它来自编辑文本。 因此,我在onClick内为启动计时器按钮创建了倒数计时器。 但是...我想要另一个按钮取消计时器...并且它无权使用倒数计时器。 因此,这并没有解决任何问题,我对如何执行此操作感到困惑。 任何建议都会有所帮助。

编辑:我只是意识到我可以将带有监听器的停止计时器按钮移到开始计时器按钮onClick上,也...在倒数计时器下。 如果我在启动计时器onClick之外设置了倒数计时器,我只是对倒数计时器如何找到毫秒变量感到困惑。 我想将停止计时器移到倒数计时器下是可以的...但是仍然感觉像我缺少了一些东西。

Edit2:我尝试将countDownTimer移到onCreate并全局设置毫秒...但是我必须使countDownTimer最终才能使按钮能够使用它,而countDownTimer只是跳到onFinish。

    mTimerTextView = (TextView)findViewById(R.id.timer_text_view);
    mTimerEditText = (EditText)findViewById(R.id.timer_edit_text);

    mStartTimerButton = (Button)findViewById(R.id.btn_start_timer);
    mStartTimerButton.setOnClickListener(new View.OnClickListener() {           
        @Override
        public void onClick(View v) {

            // Getting time in minutes from edit text
            int timeEntered = Integer.parseInt(mTimerEditText.getText().toString());
            long milliseconds = timeEntered * 60000;

            CountDownTimer countDownTimer = new CountDownTimer(milliseconds, 1000) {

                @Override
                public void onTick(long millisUntilFinished) {
                    int seconds = (int) (millisUntilFinished / 1000) % 60;
                    int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
                    int hours   = (int) ((millisUntilFinished / (1000*60*60)) % 24);
                    mTimerTextView.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));               
                }

                @Override
                public void onFinish() {
                    new AlertDialog.Builder(DailyGoalActivity.this)
                        .setTitle("Time's Up")
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {                        
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();                            
                            }
                        }).show();
                }           
            };
            countDownTimer.start();
        }
    });

    mStopTimerButton = (Button)findViewById(R.id.btn_stop_timer);
    mStopTimerButton.setOnClickListener(new View.OnClickListener() {            
        @Override
        public void onClick(View arg0) {
            // countDownTimer.cancel(); <- How could I do this? 
        }
    });

出现问题的可能原因有两个,第一个是您需要在onCreate中创建倒数计时器,第二个是您正在停止空倒数计时器。

解决方案-1,你可以使用一个布尔变量来检查计时器已启动或没有,然后相应地启动计时器按钮click.Apart从这个初始化定时器上创建并开始在点击关注该代码,请点击此链接

solution-2停止计时器使用此代码

if(countDownTimer != null) {
     countDownTimer .cancel();
     countDownTimer = null;
 }

不是简单的全局声明CountDownTimer变量的解决方案吗?

将此代码移至onCreate

CountDownTimer countDownTimer = new CountDownTimer(milliseconds, 1000) {

    @Override
    public void onTick(long millisUntilFinished) {
        int seconds = (int) (millisUntilFinished / 1000) % 60;
        int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
        int hours   = (int) ((millisUntilFinished / (1000*60*60)) % 24);
        mTimerTextView.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));               
    }
}

然后在“开始”按钮的onClick中启动计时器,在“停止”按钮的onClick中取消计时器。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM