计时器不会停在android中

时间:2011-04-21 06:44:17

标签: android timer chronometer

在我的应用程序中,我想显示一个停止计时器手表。当我通过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();
            }
        });
    }

4 个答案:

答案 0 :(得分:24)

很抱歉,但我自己找到了一个解决方案,看起来更简单:

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

  5. 我还没有准确测试精度,因为我的眼睛似乎没问题:]

答案 1 :(得分:1)

从天文台doc

  

停止计数。这不会影响   从setBase(long)设置的基数,   只是视图显示。

我现在没有任何Android开发环境,因此无法对其进行更多调查:(

编辑: 你的代码基于code吗?它似乎使用setBase来停止当前时间

答案 2 :(得分:0)

以下作品令人惊奇:

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。当对话框关闭时,天文台将从它的最后位置开始。

答案 3 :(得分:0)

我遇到了相同的问题,并使用以下代码修复了该问题:

chronometerInstance.setbase(Systemclock.elapsedRealTime());
chronometerInstance.stop();

这使我的计时器停止计时到00:00。