当前位置:编程学习 > wap >>

有关Chronometer的问题 在线 ,急!!!!

我现在在一个Activity中设置了一个Chronometer


我希望做的是在我退出之后保存值,然后下次进入这个页面的时候接着上次计时

比如说退出的时候是00:06

那么我下次进入的时间也从  00:06开始


这个怎么实现呢?



我现在用的是
private SharedPreferences sp;
private SharedPreferences.Editor editor;保存

在onDestroy(){
mChronometer.stop();
        long stime = mChronometer.getBase() ;

editor.putLong("chronometer", stime);
editor.commit();



然后在下次进来的时候

long jixuchronometer = sp.getLong("chronometer", 0);
mChronometer.setBase(jixuchronometer);
mChronometer.start();


现在的问题是我退出的这一段时间,他依然在计时,并没有停止啊,求解

我的qq,673305735,在线等,着急着急着急 --------------------编程问答-------------------- 对这个类Chronometer不熟悉,是否还要调用其他相关函数? --------------------编程问答-------------------- 自己顶 --------------------编程问答-------------------- 楼主你没有明白Chronometer的setBase\getBase是什么意思。

Base指的是Chronometer的起始时间,Chronometer显示的时间是当前时间和起始时间的间隔。

默认情况下,Chronometer调用以调用start的时间做为base,如果指定了,就以指定时间做为base。


换句话说,对于一个Chronometer运行过程中,它的base值是固定的(未调用setBase的情况下)。
在你的代码中,每次写入SharedPreferences的base值都是同一个。按照上面的定义,显示的值自然只跟系统时间有关,窗口关闭的时间也会计算在内了。


上文中系统时间使用的是这个SystemClock.elapsedRealtime(),它指的是系统已经启动之后的毫秒数


解决方法:
destroy时,存入Chronometer.stop执行是的SystemClock.elapsedRealtime()与Chronometer.getBase()只差
oncreate时,载入这个值val,将(SystemClock.elapsedRealtime() - val)设置为Chronometer的base

代码实现

// onCreate中
long lSaved = sp.getLong("chronometer", 0);
if (lSaved != 0)
{
chronometer1.setBase(SystemClock.elapsedRealtime() - lSaved);
}
chronometer1.start();


//onDestroy中
chronometer1.stop();
long stime = SystemClock.elapsedRealtime() - chronometer1.getBase() ;

editor.putLong("chronometer", stime);
editor.commit();
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,