按下按钮后定时器轻拂

时间:2017-11-20 19:13:38

标签: android timer countdown

我正在尝试在应用上设置计时器。我正在使用下面的代码,它适用于创建。但是,如果第二次按下按钮,秒钟开始变得混乱并轻弹一下。 有任何想法吗?

 package com.example.android.courtcounter;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {
    public int counter;
    TextView timer;
    Button button;
    private static final String FORMAT = "%02d:%02d";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        timer = (TextView) findViewById(R.id.timer);
        button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View V) {
                new CountDownTimer(2400000, 1000) {
                    public void onTick(long millisUntilFinished) {
                        timer.setText (String.format(FORMAT, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
                                TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
                                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));


                                }

                    public void onFinish() {
                        timer.setText("done!");
                    }
                }.start();


            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

CountDownTimer可能会在旧的自身实例上闪烁。尝试在重新开始倒计时之前调用cancel()。

答案 1 :(得分:0)

在整个CountDownTimer中管理Activity的单个实例。你在同一个Activity上有很多实例,它可能会变得混乱。首先在onCreate之外,但在课堂内首先将其声明为

CountDownTimer countDownTimer;

然后在Button的onClickListener onClick方法中执行此操作:

if(countDownTimer!=null){
   countDownTimer.cancel();
}
countDownTimer= new CountDownTimer(2400000, 1000) {
                public void onTick(long millisUntilFinished) {
                    timer.setText (String.format(FORMAT, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
                            TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));


                            }

                public void onFinish() {
                    timer.setText("done!");
                }
            }.start();

从这里开始,您将只管理该类的一个实例,而不是在每次单击按钮时创建更多实例。