【问题标题】:Loop a Countdown timer X number of times,循环倒数计时器 X 次,
【发布时间】:2019-01-29 17:44:19
【问题描述】:

我正在尝试循环我的倒数计时器特定次数,但我不确定我应该在哪里添加我的 for 循环...目前正在尝试执行间隔计时器功能(我知道有一种方法可以通过 Handler 来做,但我还是个初学者,对如何使用 handler 有点困惑)

我已经尝试在“.start”和 StartTimer 函数中添加它,但倒计时时间仍然保持在 0。如果能提供任何帮助会很棒,因为我还是个初学者。谢谢!

package com.example.bushykai.myapplication;

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

public class Timer extends AppCompatActivity {
private static final long START_TIME_IN_MILLIS=10000;
private int sets = 3;
private TextView textViewCountdown;
private Button buttonStartPause;
private Button buttonReset;

private CountDownTimer countDownTimer;

private boolean timerRunning;

private long timeLeftInMillis = START_TIME_IN_MILLIS;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer);

    textViewCountdown = findViewById(R.id.countdownTimer);
    buttonStartPause = findViewById(R.id.startPause);
    buttonReset= findViewById(R.id.reset);

    buttonStartPause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (timerRunning) {
                pauseTimer();
            }

            else {

                    startTimer();


            }
        }
    });

    buttonReset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            resetTimer();
        }
    });

    updateCountDownText();
}

private void pauseTimer() {
    countDownTimer.cancel();
    timerRunning = false;
    buttonStartPause.setText("Start");
    buttonReset.setVisibility(View.VISIBLE);
}

private void startTimer() {
    countDownTimer = new CountDownTimer(timeLeftInMillis, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {

            timeLeftInMillis = millisUntilFinished;
            updateCountDownText();
        }

        @Override
        public void onFinish() {
            timerRunning = false;
            buttonStartPause.setText("Start");
            buttonStartPause.setVisibility(View.INVISIBLE);
            buttonReset.setVisibility(View.VISIBLE);

        }
    }.start();
    timerRunning = true;
    buttonStartPause.setText("Pause");
    buttonReset.setVisibility((View.INVISIBLE));

}

private void resetTimer() {

    timeLeftInMillis = START_TIME_IN_MILLIS;
    updateCountDownText();
    buttonReset.setVisibility(View.INVISIBLE);
    buttonStartPause.setVisibility(View.VISIBLE);

}

private void updateCountDownText() {
    int minutes = (int) (timeLeftInMillis / 1000 ) / 60;
    int seconds = (int) (timeLeftInMillis / 1000 ) % 60;

    String timeLeftFormatted = String.format("%02d:%02d", minutes, seconds);

    textViewCountdown.setText(timeLeftFormatted);

}
}

【问题讨论】:

标签: android


【解决方案1】:

你必须在你的类中添加一个 Runnable Handler 尝试下面的代码并使用你的倒数计时器进行修改

public Handler timerHandler = new Handler();
public Runnable timerRunnable = new Runnable() {

    @Override
    public void run() {
        //show alert or DO Whatever
    }
    };


public void timerStart() {
    timerStop();
    timerHandler.postDelayed(timerRunnable, Constants.TIMER_TIME_OUT);
}

public void timerStop() {
    timerHandler.removeCallbacks(timerRunnable);
}

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2016-11-06
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多