2016-12-26 81 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); 
     } 
    } 
}); 

它会计算所经过的时间,并显示停止后的时间...