У меня есть 10 кнопок на моем фрагменте. У меня есть таймер обратного отсчета «0:00:00», который подсчитывает при первом нажатии кнопки.
Таймер обратного отсчета работает нормально, он останавливается в OnPause()
и возобновляется в onResume()
отлично. ..
Я хочу, чтобы таймер запускался при следующем нажатии кнопки всякий раз, когда действие возобновляется.
Мой метод Runnable в моей функции MainActivity . java
private static Runnable updateTimerMethod = new Runnable() {
public void run() {
timeInMillies = SystemClock.uptimeMillis() - startTime;
finalTime = timeSwap + timeInMillies;
int seconds = (int) (finalTime / 1000);
int hours = seconds / 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
/*
int milliseconds = (int) (finalTime % 1000);
textTimer.setText("" + minutes + ":"
+ String.format("%02d", seconds) + ":"
+ String.format("%03d", milliseconds));
myHandler.postDelayed(this, 0); */
textTimer.setText("" + String.format("%d", hours) + ":"
+ String.format("%02d", minutes) + ":"
+ String.format("%02d", seconds));
myHandler.postDelayed(this, 0);
}
};
Мой метод startTimer и метод pauseTimer
public static void startTimer() {
startTime = SystemClock.uptimeMillis();
myHandler.postDelayed(updateTimerMethod, 0);
// textTimerValue.setVisibility(View.INVISIBLE);
}
public static void pauseTimer() {
timeSwap += timeInMillies;
myHandler.removeCallbacks(updateTimerMethod);
timerValue = textTimer.getText().toString();
Log.d(timerValue, "pause");
// textTimerValue.setText(timerValue);
}
Мои переопределенные методы
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, ACTIVITY_NAME+" onStart");
}
@Override
protected void onResume() {
startTimer();
super.onResume();
Log.i(TAG, ACTIVITY_NAME+" onResume");
}
@Override
protected void onPause() {
pauseTimer();
super.onPause();
Log.i(TAG, ACTIVITY_NAME+" onPause");
}
Я хочу возобновить таймер при нажатии кнопки next, когда действие возобновляется после onPause()
, а не onResume()
..
My OnClickListener
for (int i = 0; i < idArray.length; i++) {
final int b = i;
bt[b] = (Button) v.findViewById(idArray[b]); //Fetch the view id from array
bt[b].setEnabled(false);
if (!bt[0].isEnabled()) {
bt[0].setEnabled(true);
}
bt[b].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt0:
if (click0 ==1) {
MainActivity.startTimer();
}
click0 = click0 + 1;
if (click0 % 2 == 0) {
bt[0].setBackgroundResource(R.drawable.btnew4);
}
}
switch (v.getId()) {
case R.id.bt1:
// how to resume the timer on click of this button, if activity resumes from an onPause()
click1 = click1 + 1;
if (click1 % 2 == 0) {
bt[1].setBackgroundResource(R.drawable.btnew4);
}
}
}
}
I ' мы пытались проверить (if booleanOnPause == false)
в onClickListener()
перед повторным запуском таймера при каждом нажатии кнопки, но таймер перезапускается при каждом нажатии кнопки, так как booleanOnPause
всегда ложно, когда активность активна.