Возобновить таймер CountUp onClick кнопки в методе onResume () - PullRequest
0 голосов
/ 28 марта 2020

У меня есть 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 всегда ложно, когда активность активна.

...