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

时间:2014-04-27 10:02:02

标签: android countdowntimer

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

我遇到的问题是......倒计时器所需的变量(毫秒)无法分配,直到我点击开始计时器按钮,因为它来自编辑文本。所以我在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? 
        }
    });

2 个答案:

答案 0 :(得分:1)

你的问题首先有两个可能的原因是你需要在onCreate中创建倒数计时器,第二个是你要停止空倒数计时器。

solution-1 您可以使用布尔变量来检查计时器是否已启动,然后在按钮单击时相应地启动计时器。在创建时启动计时器,然后单击“开始”此代码请遵循此link

解决方案-2 停止计时器使用此代码

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

答案 1 :(得分:0)

不是全局声明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中取消。

希望它有所帮助。