2016-12-26 102 views
0

我已經設置了一個計時器,它顯示了在應用程序屏幕上計算的時間。 當您點擊開始按鈕計時器正在運行,當您點擊停止它停止,但當我試圖恢復它,它重新啓動現有的時間。恢復和暫停基於處理程序的計時器

如何恢復定時器而不刷新/重新啓動已存在的時間?

import android.content.Intent; 
import android.os.Handler; 
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 { 

    TextView timerTextView; 
    long startTime = 0; 

    //runs without a timer by reposting this handler at the end of the runnable 
    Handler timerHandler = new Handler(); 
    Runnable timerRunnable = new Runnable() { 

     @Override 
     public void run() { 
      long millis = System.currentTimeMillis() - startTime; 
      int seconds = (int) (millis/1000); 
      int minutes = seconds/60; 
      int hours = minutes/60; 
      seconds = seconds % 60; 

      timerTextView.setText(String.format("%d:%02d:%02d", hours, minutes, seconds)); 

      timerHandler.postDelayed(this, 500); 
     } 
    }; 

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

     timerTextView = (TextView) findViewById(R.id.timerTextView); 

     Button b = (Button) findViewById(R.id.button); 
     b.setText(R.string.start); 
     b.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Button b = (Button) v; 
       if (b.getText().equals("Stop")) { 
        timerHandler.removeCallbacks(timerRunnable); 
        b.setText(R.string.resume); 
       } else { 
        startTime = System.currentTimeMillis(); 
        timerHandler.postDelayed(timerRunnable, 0); 
        b.setText(R.string.stop); 
       } 
      } 
     }); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     timerHandler.removeCallbacks(timerRunnable); 
     Button b = (Button)findViewById(R.id.button); 
     b.setText("start"); 
    } 
} 
+1

也許你可以實現與發送消息到處理程序 – zombie

+0

@zombie ,你的意思是將當前時間保存爲一個整數,當我恢復時它會繼續? – ExCluSiv3

回答

1

試試這個代碼:

long startTime = 0; 
long elapsedTime ; 

b.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Button b = (Button) v; 
     if (b.getText().equals("Stop")) { 
      elapsedTime = System.currentTimeMillis() - startTime; 
      timerHandler.removeCallbacks(timerRunnable); 
      b.setText(R.string.resume); 
     } else { 
      startTime = System.currentTimeMillis() - elapsedTime; 
      timerHandler.postDelayed(timerRunnable, 0); 
      Calendar cs = Calendar.getInstance(); 
      System.out.println("Current time => " + cs.getTime()); 
      SimpleDateFormat df = new SimpleDateFormat("HH:mm"); 
      String formattedDate = df.format(cs.getTime()); 
      timerTextView.setText(formattedDate); 
      b.setText(R.string.stop); 
     } 
    } 
}); 

它會計算所經過的時間,並顯示停止後的時間...