Функции паузы и возобновления обратного отсчета

Я создал таймер обратного отсчета на основе учебника, который я ищу в Google. Но я не смог возобновить обратный отсчет. Он снова перезапустится с 10, когда я нажму на кнопку.

Я хочу создать таймер обратного отсчета, который может приостанавливаться и возобновляться. Спасибо! Вот мой код:

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class TimerC extends Activity {
Button btns;
    TextView tv;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer_c);

    btns = (Button)findViewById(R.id.btnstartpause);
    tv  = (TextView)findViewById(R.id.tv);
    tv.setText("10"); 
    btns.setText("Start");

    final MyCounter timer = new MyCounter(10000,1000);

  btns.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            if (btns.getText()== "Start")
            {
                timer.start();  

                btns.setText("Pause");
            }
            else if (btns.getText()== "Pause")
            {
                btns.setText("Start");
                timer.cancel();                 
            }
        }
    });    
}

public class MyCounter extends CountDownTimer{

    public MyCounter(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
        System.out.println("Timer Completed.");
        tv.setText("Timer Completed.");
    }

    @Override
    public void onTick(long millisUntilFinished) {
        tv.setText((millisUntilFinished/1000)+"");
        System.out.println("Timer  : " + (millisUntilFinished/1000));
    }
  }
}

person Community    schedule 06.11.2012    source источник
comment
Я объявил одно целое число и назвал его remain, затем я сохранил оставшееся число в remain при нажатии кнопки. Когда я нажал, чтобы возобновить, я вернул осталось, используя setText. Ну, это не работает. Результат был таким же, как код выше. Спасибо.   -  person    schedule 06.11.2012
comment
В этом посте я предлагаю простое решение этой проблемы, используя класс CustomCountDownTimer, который позволяет вам свободно приостанавливать и возобновлять работу. stackoverflow.com/questions/36965624/ Надеюсь, что это поможет вам!   -  person Francisco Durdin Garcia    schedule 01.05.2016


Ответы (2)


Ваша проблема должна заключаться в сравнении строк здесь:

 btns.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        if (btns.getText()== "Start")
        {
            timer.start();  

            btns.setText("Pause");
        }
        else if (btns.getText()== "Pause")
        {
            btns.setText("Start");
            timer.cancel();                 
        }
    }
});  

Вы должны использовать object.equals(otherObject), потому что оператор == сравнивает ссылки, а не значения. пример:

 btns.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        if (btns.getText().equals("Start"))
        {
            timer.start();  

            btns.setText("Pause");
        }
        else if (btns.getText().equals("Pause"))
        {
            btns.setText("Start");
            timer.cancel();                 
        }
    }
}); 
person Ercan    schedule 06.11.2012

Сохраните значение millisUntilFinished времени в onTick в атрибуте класса. И когда вы хотите перезапустить таймер, повторно установите его с этим значением в качестве первого параметра следующим образом:
Редактировать:
Установите таймер как атрибут класса:

private MyCounter timer;

И измените слушателя на это:

btns.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        if (btns.getText().equals("Start"))
        {
            timer = new MyCounter(remainingTime, 1000);
            timer.start();  

            btns.setText("Pause");
        }
        else if (btns.getText().equals("Pause"))
        {
            btns.setText("Start");
            timer.cancel();                 
        }
    }
});
person yDelouis    schedule 06.11.2012
comment
Я сохраняю значение с помощью long remaining = millisUntilFinished; и ставлю под public void onTick(long millisUntilFinished) {. Как я могу повторно создать первый параметр? Новое здесь, спасибо! - person ; 06.11.2012