Android如何重启Timer Handler?

时间:2013-11-13 19:46:48

标签: android button timer handler restart

我想知道在计时器停止后按下按钮后如何重新启动计时器。 我想要的是:

  1. 第一个按钮点击:计时器启动
  2. 第二次点击:计时器停止
  3. 第三次点击:计时器重启
  4. 前两个正在运行,但没有重启。

    private Button startButton;
    
    private TextView timerValue;
    
    private long startTime = 0L;
    
    private Handler customHandler = new Handler();
    
    long timeInMilliseconds = 0L;
    long timeSwapBuff = 0L;
    long updatedTime = 0L;
    
    private int checkState = 0;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pyramide);
    
        timerValue = (TextView) findViewById(R.id.pyramideTime);
    
        startButton = (Button) findViewById(R.id.pyramideButton);
    
        startButton.setOnClickListener(new View.OnClickListener() {
    
            public void onClick(View view) {
                // start
                if (checkState == 0) {
                    startButton.setText("Fertig");
                    startTime = SystemClock.uptimeMillis();
                    customHandler.postDelayed(updateTimerThread, 0);
                    checkState = 1;
                }
                // pause
                else if (checkState == 1) {
                    startButton.setText("Neu starten");
                    timeSwapBuff += timeInMilliseconds;
                    customHandler.removeCallbacks(updateTimerThread);
                    checkState = 2;
                }
                // restart
                else if (checkState == 2) {
                    timerValue.setText("0");
                    timeInMilliseconds = 0L;
    
                    customHandler.postDelayed(updateTimerThread, 0);
                    checkState = 0;
                    startButton.setText("Fertig");
                }
            }
        });
    
    }
    
    private Runnable updateTimerThread = new Runnable() {
    
        public void run() {
    
            timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
    
            updatedTime = timeSwapBuff + timeInMilliseconds;
    
            int secs = (int) (updatedTime / 1000);
            int mins = secs / 60;
            secs = secs % 60;
            int milliseconds = (int) (updatedTime % 1000);
            timerValue.setText("" + mins + ":" + String.format("%02d", secs)
                    + ":" + String.format("%03d", milliseconds));
            customHandler.postDelayed(this, 0);
        }
    
    };
    

1 个答案:

答案 0 :(得分:0)

您可以使用计数器尝试这样的事情:

 startButton.setOnClickListener(new View.OnClickListener() {
                        int counter = 0;
    public void onClick(View view) {
                                        counter++;
                                    if (counter == 1) {
            startButton.setText("Fertig");
            startTime = SystemClock.uptimeMillis();
            customHandler.postDelayed(updateTimerThread, 0);
                                    else if (counter == 2) {
            startButton.setText("Neu starten");
            timeSwapBuff += timeInMilliseconds;
            customHandler.removeCallbacks(updateTimerThread);
                                    }
                                    else if (counter ==3) {
            timerValue.setText("0");
            timeInMilliseconds = 0L;

            customHandler.postDelayed(updateTimerThread, 0);
            startButton.setText("Fertig");
            counter = 0;
}
}
});