Android 文本视图中的倒计时

Android 文本视图中的倒计时,android,textview,countdowntimer,Android,Textview,Countdowntimer,我写了这段代码,我想当我点击btnGetPincode时,一个60秒的倒计时开始运行。 但是它没有发生,结果在textview=00:00时,什么也没有发生。为什么? 这是我的代码: btnGetPinCode.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { btnGetPinCode.setClickable(false); btnGe

我写了这段代码,我想当我点击btnGetPincode时,一个60秒的倒计时开始运行。 但是它没有发生,结果在textview=00:00时,什么也没有发生。为什么?

这是我的代码:

 btnGetPinCode.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
 btnGetPinCode.setClickable(false);
                btnGetPinCode.setBackgroundResource((R.drawable.button4));
                txtShowPinCode.setVisibility(View.VISIBLE);

                //initialize timer duration
                long duration = TimeUnit.MINUTES.toMillis(1);

                //initialize timer countdown timer
                new CountDownTimer(duration, 1000) {
                    @Override
                    public void onTick(long millisUntilFinished) {
                        String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
                                , TimeUnit.MILLISECONDS.toMinutes(1)
                                , TimeUnit.MILLISECONDS.toSeconds(1) -
                                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(1)));

                        //set converted time to textView
                        txtTimer.setVisibility(View.VISIBLE);
                        txtTimer.setText(duration2+"");
                        btnOk.setText(duration2);
                    }

                    @Override
                    public void onFinish() {
                        //when timer finished, hide text view
                        txtTimer.setVisibility(View.INVISIBLE);
                        btnGetPinCode.setBackgroundResource(R.drawable.button);
                        btnGetPinCode.setClickable(true);
                    }
                }.start();
    });

}问题:您在
duration2
变量的每个参数中设置
1
,因此文本视图永远不会更改,您需要设置每个计时器刻度上更改的实际值,这是
onTick()
方法>
millisuntillfinished

将计时器更改为:

new CountDownTimer(duration, 1000) {
    @Override
    public void onTick(long millisUntilFinished) {
        String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
                , TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //<<<<< change here
                , TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //<<<< change here
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here

        //set converted time to textView
        txtTimer.setVisibility(View.VISIBLE);
        txtTimer.setText(duration2+"");
        btnOk.setText(duration2);
    }

    @Override
    public void onFinish() {
        //when timer finished, hide text view
        txtTimer.setVisibility(View.INVISIBLE);
        btnGetPinCode.setBackgroundResource(R.drawable.button);
        btnGetPinCode.setClickable(true);
    }
}.start();
新倒计时(持续时间,1000){
@凌驾
公共void onTick(长毫秒未完成){
String duration2=String.format(Locale.ENGLISH,“%02d:%02d”

,TimeUnit.millides.toMinutes(millisuntiltfinished)/问题:您在
duration2
变量的每个参数中设置
1
,因此文本视图永远不会更改,您需要设置每个计时器刻度上更改的实际值,这是
onTick()
方法>
millisuntiltfinished

将计时器更改为:

new CountDownTimer(duration, 1000) {
    @Override
    public void onTick(long millisUntilFinished) {
        String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
                , TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //<<<<< change here
                , TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //<<<< change here
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here

        //set converted time to textView
        txtTimer.setVisibility(View.VISIBLE);
        txtTimer.setText(duration2+"");
        btnOk.setText(duration2);
    }

    @Override
    public void onFinish() {
        //when timer finished, hide text view
        txtTimer.setVisibility(View.INVISIBLE);
        btnGetPinCode.setBackgroundResource(R.drawable.button);
        btnGetPinCode.setClickable(true);
    }
}.start();
新倒计时(持续时间,1000){
@凌驾
公共void onTick(长毫秒未完成){
String duration2=String.format(Locale.ENGLISH,“%02d:%02d”

,TimeUnit.millides.toMinutes(millisuntiltfinished)/主要问题在于时间的计算
duration2

//Declare timer
CountDownTimer cTimer = null;

cTimer  = new CountDownTimer(duration, 1000) {
@Override
public void onTick(long millisUntilFinished) {
    String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
            , TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //Here is the problem
            , TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //Here is the problem
                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here

    //set converted time to textView
    txtTimer.setVisibility(View.VISIBLE);
    txtTimer.setText(duration2+"");
    btnOk.setText(duration2);
}

@Override
public void onFinish() {
    //when timer finished, hide text view
    txtTimer.setVisibility(View.INVISIBLE);
    btnGetPinCode.setBackgroundResource(R.drawable.button);
    btnGetPinCode.setClickable(true);
 }
}.start();

主要问题在于计算时间
duration2

//Declare timer
CountDownTimer cTimer = null;

cTimer  = new CountDownTimer(duration, 1000) {
@Override
public void onTick(long millisUntilFinished) {
    String duration2 = String.format(Locale.ENGLISH, "%02d : %02d"
            , TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) //Here is the problem
            , TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - //Here is the problem
                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); //<<<<< change here

    //set converted time to textView
    txtTimer.setVisibility(View.VISIBLE);
    txtTimer.setText(duration2+"");
    btnOk.setText(duration2);
}

@Override
public void onFinish() {
    //when timer finished, hide text view
    txtTimer.setVisibility(View.INVISIBLE);
    btnGetPinCode.setBackgroundResource(R.drawable.button);
    btnGetPinCode.setClickable(true);
 }
}.start();

是的,谢谢million@GhazalT75很高兴听到!如果你的问题是正确的,请接受答案。谢谢million@GhazalT75很高兴听到!如果你的问题是针对你的,请接受答案