хронометр не останавливается в Android - PullRequest
5 голосов
/ 21 апреля 2011

В моем приложении я хочу показать часы таймера остановки.Когда я искал через Google, я нашел опцию под названием Chronometer на сайте разработчиков.Это похоже на часы таймера остановки.

Когда я нажимаю кнопку запуска, я хочу, чтобы таймер запускался, и когда я нажимаю кнопку паузы, таймер должен быть приостановлен, когда после нажатия кнопки запуска он должен начинаться свремя его остановки.

Но в этом хронометре он начинается с 0, а когда я нажимаю паузу в 1 мин 10 сек, он приостанавливается.Когда я нажимаю еще раз, запускается через 5 минут, таймер начинает отсчет с 6 минут 10 секунд, даже при паузе таймер работает, как остановить это и возобновить в тот момент, когда он был остановлен.

Ниже приведены моикод для хронометра

Start = (Button)findViewById(R.id.widget306);
        Start.setOnClickListener(new View.OnClickListener() 
        {   
            @Override
            public void onClick(View v) 
            {
                chronometer.start();                
            }
        });

        Stop = (Button)findViewById(R.id.widget307);
        Stop.setOnClickListener(new View.OnClickListener() 
        {   
            @Override
            public void onClick(View v) 
            {
                  chronometer.stop();
            }
        });
    }

Ответы [ 3 ]

24 голосов
/ 26 июня 2011

Извините, но я сам нашел решение, и оно кажется намного проще:

  1. В вашей деятельности объявите переменную-член (например, lastPause), чтобы записать время вашего последнегопауза:

    private long lastPause;

  2. Запустите таймер (предположим, что переменная вашего таймера crono):

    crono.setBase(SystemClock.elapsedRealtime());

    crono.start();

  3. Приостановите таймер каждый раз, используя:

    lastPause = SystemClock.elapsedRealtime();

    crono.stop();

  4. Возобновите свой таймер каждый раз, используя:

    crono.setBase(crono.getBase() + SystemClock.elapsedRealtime() - lastPause);

    crono.start();

Я еще не проверял точность точнокак мне кажется, все в порядке:]

1 голос
/ 21 апреля 2011

Из хронометра Док

Хватит считать. Это не влияет база, установленная из setBase (long), просто отображение вида.

У меня сейчас нет среды разработки для Android, поэтому я не могу исследовать ее подробнее:

Edit: это код , на котором вы основали свой код? Кажется, используется setBase до текущего времени на остановке

0 голосов
/ 27 апреля 2015

Следующие чудеса творения:

final long lastPause = SystemClock.elapsedRealtime();
mChronometer.stop();

final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity)
    .setCancelable(false)
    .setMessage("Stop chronometer while AlertDialog is asking something.")
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
            mChronometer.setBase(mChronometer.getBase() 
                + SystemClock.elapsedRealtime() 
                - lastPause);
            mChronometer.start();
        }
    });
alertDialogBuilder.create().show();

Этот фрагмент почти останавливает хронометр и показывает AlertDialog.Когда диалоговое окно закрыто, хронометр начнёт с последней позиции.

...