Android中计时器无法停止

7
在我的应用程序中,我想展示一个停止计时器。当我通过谷歌搜索时,我在开发者网站上找到了一个名为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个回答

31

抱歉,我已经自行找到了解决方案,而且看起来更简单:

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

我还没有进行精度测试,但从我的角度来看好像没问题 :]


2

来自计时器文档

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

我现在没有任何Android开发环境,所以不能更深入地调查它 :(

编辑:你的代码是基于这个代码吗?它似乎在停止时将setBase设置为当前时间。


1

我遇到了同样的问题,通过使用以下代码解决了它:

chronometerInstance.setBase(SystemClock.elapsedRealtime());
chronometerInstance.stop();

这阻止了我的计时器计数到00:00。

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的。当对话框关闭后,计时器将从其上次位置开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接