如何保存定时器class开始时间?
How to save timer class start time?
我正在我的项目中实施计数概念。它包含 3 个问题按钮。如果用户单击第一个按钮,计数就会开始。每当他按下第二个问题时.. 计数应该重置。如果用户 returns 到第一个按钮,那么计数应该更新它暂停的地方..
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
long systemTime = System.currentTimeMillis();
Log.d("System Time", String.valueOf(systemTime));
long millis = systemTime - startTime;
Log.d("millis", String.valueOf(millis));
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
qstimer.setText(String.format("%d:%02d", minutes, seconds));
timerHandler.postDelayed(this, 500);
}
};
将 OnCLickListener 添加到您的按钮:
private OnClickListener mOnClickListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
if (mOnButtonClickListener != null)
{
switch (v.getId())
{
case R.id.on:
startTime = SystemClock.elapsedRealtime();
timerHandler.post(timerRunnable);
break;
case R.id.off:
timerHandler.removeCallbacks(timerRunnable);
break;
}
}
}
};
如果您希望关闭按钮暂停计时器,您必须存储暂停开始时间和总暂停时间:
private OnClickListener mOnClickListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
if (mOnButtonClickListener != null)
{
switch (v.getId())
{
case R.id.on:
if(paused)
{
pausedTime += SystemClock.elapsedRealtime()-pauseStartTime;
}
else
{
startTime = SystemClock.elapsedRealtime();
}
timerHandler.post(timerRunnable);
break;
case R.id.off:
pauseStartTime = SystemClock.elapsedRealtime();
timerHandler.removeCallbacks(timerRunnable);
break;
}
}
}
};
在你的可运行文件中:
long millis = time - startTime - pausedTime;
希望对您有所帮助
试试这个
在您的第一个按钮(开启)中粘贴此代码,在第二个按钮(关闭)中粘贴相同的代码,但不是 "i==0" 使用另一个变量
if(i == 0){
pauseTime = timeSwap+= timeInMillies;
timeMap.put(keyQuestion, pauseTime);
keyQuestion = q1.getText().toString();
timerStart();
i = 1;
}
else if(i == 1){
myHandler.removeCallbacks(updateTimerMethod);
pauseTime = timeSwap+= timeInMillies;
timeMap.put(keyQuestion, pauseTime);
keyQuestion = q1.getText().toString();
timeSwap = 0L;
timeSwap += timeMap.get(keyQuestion);
startTime = SystemClock.uptimeMillis();
myHandler.postDelayed(updateTimerMethod, 0);
}
希望对您有所帮助。
我正在我的项目中实施计数概念。它包含 3 个问题按钮。如果用户单击第一个按钮,计数就会开始。每当他按下第二个问题时.. 计数应该重置。如果用户 returns 到第一个按钮,那么计数应该更新它暂停的地方..
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
long systemTime = System.currentTimeMillis();
Log.d("System Time", String.valueOf(systemTime));
long millis = systemTime - startTime;
Log.d("millis", String.valueOf(millis));
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
qstimer.setText(String.format("%d:%02d", minutes, seconds));
timerHandler.postDelayed(this, 500);
}
};
将 OnCLickListener 添加到您的按钮:
private OnClickListener mOnClickListener = new OnClickListener() {
@Override
public void onClick(View v)
{
if (mOnButtonClickListener != null)
{
switch (v.getId())
{
case R.id.on:
startTime = SystemClock.elapsedRealtime();
timerHandler.post(timerRunnable);
break;
case R.id.off:
timerHandler.removeCallbacks(timerRunnable);
break;
}
}
}
};
如果您希望关闭按钮暂停计时器,您必须存储暂停开始时间和总暂停时间:
private OnClickListener mOnClickListener = new OnClickListener() {
@Override
public void onClick(View v)
{
if (mOnButtonClickListener != null)
{
switch (v.getId())
{
case R.id.on:
if(paused)
{
pausedTime += SystemClock.elapsedRealtime()-pauseStartTime;
}
else
{
startTime = SystemClock.elapsedRealtime();
}
timerHandler.post(timerRunnable);
break;
case R.id.off:
pauseStartTime = SystemClock.elapsedRealtime();
timerHandler.removeCallbacks(timerRunnable);
break;
}
}
}
};
在你的可运行文件中:
long millis = time - startTime - pausedTime;
希望对您有所帮助
试试这个
在您的第一个按钮(开启)中粘贴此代码,在第二个按钮(关闭)中粘贴相同的代码,但不是 "i==0" 使用另一个变量
if(i == 0){
pauseTime = timeSwap+= timeInMillies;
timeMap.put(keyQuestion, pauseTime);
keyQuestion = q1.getText().toString();
timerStart();
i = 1;
}
else if(i == 1){
myHandler.removeCallbacks(updateTimerMethod);
pauseTime = timeSwap+= timeInMillies;
timeMap.put(keyQuestion, pauseTime);
keyQuestion = q1.getText().toString();
timeSwap = 0L;
timeSwap += timeMap.get(keyQuestion);
startTime = SystemClock.uptimeMillis();
myHandler.postDelayed(updateTimerMethod, 0);
}
希望对您有所帮助。