-1

I am implementing countup concept in my project..it contains 3 question buttons..if user clicks on first button count up is start. Whenever he presses the 2nd question.. count up should reset. If user returns to first button then count up should update where it paused..

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);
    }
};
user2736738
  • 30,591
  • 5
  • 42
  • 56

2 Answers2

0

Add an OnCLickListener to your buttons :

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;

            }
        }

    }
};

If you want your OFF button to PAUSE the timer you have to store the pause start time and the total paused time:

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;

            }
        }

    }
};

And in your runnable :

long millis = time - startTime - pausedTime;

Hope it helps

andryr
  • 684
  • 7
  • 15
0

try this

In your first button(ON) paste this code and in second button(OFF) paste the same code but instead of "i==0" take another variable

      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);
        }

Hope it helps.

Mohammad nabil
  • 1,010
  • 2
  • 12
  • 23