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

关于android关于计时器Chronometer的问题

刚刚接触关于Chronometer的计时器,我遇到了问题:
本人代码如此:

import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.AlertDialog.Builder;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.DialogInte易做图ce;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class myapp extends Activity {

private Button start;
private Button stop;
private Button reBase;
private Chronometer timing;
private long timeNow;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
doing();
}

void doing() {
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
reBase = (Button) findViewById(R.id.reBase);
timing = (Chronometer) findViewById(R.id.chronometer);

start.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
timing.setBase(SystemClock.uptimeMillis());
timing.start();
}
});

stop.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
timing.stop();
}
});

reBase.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
timing.setBase(SystemClock.elapsedRealtime());
}
});
}
}


其实就是一个程序,里面有个计时器Chronometer,另外有三个按钮,分别是:开始、停止、重置。
当我开始计时之后,按一下停止按钮(此时计时时刻为0:09),时间显示就停止在0:09;
但是当我在这时再按一次开始按钮,显示的时间竟然突然变成(0:20);

反复试过很多次,都会有这个现象,是不是调用了stop()方法后,事事上还是在计时,只是显示上不变而已,而当再次使用start()时候,事实上还是会继续计时的?

那么请问如何实现计时功能,即有开始、停止、重置功能。

补充,本人使用android2.2.
--------------------编程问答-------------------- 帮你顶... --------------------编程问答-------------------- 建议加入LOG信息打印一下,看整个过程是如何调用的。有的按钮按下去和弹起来都要调用函数的。 --------------------编程问答-------------------- 顶起来 --------------------编程问答--------------------
引用 2 楼 yihua0001 的回复:
建议加入LOG信息打印一下,看整个过程是如何调用的。有的按钮按下去和弹起来都要调用函数的。


应该不会这样,因为Chronometer是依靠几个方法来实现,跟按钮控件没有直接的关系 --------------------编程问答-------------------- 友情帮顶!!! --------------------编程问答-------------------- 没用过2.2 ,但我感觉LZ说的那个问题应该不存在 ,不会这样设计 ,而且你确定你每次按下按钮的差距都刚好合适?!都差0.11 不可能是吧。可以用LS的方法  ,自己检查一下 , 具体过程是怎么的。LOG打印一下看看。 --------------------编程问答-------------------- 我想问一下你的android2.2是如何配置的,需要哪些文件,分别怎么放置?谢谢
希望您能解答 --------------------编程问答-------------------- 这个是正常的功能. 通一般电子跑表是一样的, stop只是停止的时间, 但并没有停止计时.
你所期望的功能, 可以使用setBase(). --------------------编程问答-------------------- setBase()应该如何设置???? --------------------编程问答--------------------
引用 9 楼 zenglilaile111 的回复:
setBase()应该如何设置????


如果你想用setBase将计时器清零的话,可以用下面的语句:

setBase(SystemClock.elapsedRealtime());
--------------------编程问答-------------------- 把doing改成:

void doing() {
        start = (Button) findViewById(R.id.start);
        stop = (Button) findViewById(R.id.stop);
        reBase = (Button) findViewById(R.id.reBase);
        timing = (Chronometer) findViewById(R.id.chronometer);

        start.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                timing.setBase(SystemClock.elapsedRealtime());    // 改成这样就符合楼主的要求啦
                timing.start();
            }
        });

        stop.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                timing.stop();
            }
        });

        reBase.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                timing.setBase(SystemClock.elapsedRealtime());
            }
        });
--------------------编程问答-------------------- 文档上系的很清楚。

public void setBase (long base)

Since: API Level 1
Set the time that the count-up timer is in reference to.
Parameters
base Use the elapsedRealtime() time base.
--------------------编程问答-------------------- 求教各位大侠,Chronometer的计时器停止计时后,如何保存所用时间? --------------------编程问答--------------------
引用 13 楼 d449027589 的回复:
求教各位大侠,Chronometer的计时器停止计时后,如何保存所用时间?


如果要记时间的话,你直接用java的代码System.currentTimeMillis()直接取系统时间好了。Chronometer其实在实际中,几乎没有太多的用武之地。

通常的做法是,在调用Chronometer的start()方法的同时,调用System.currentTimeMillis(),在调用Chronometer的stop()方法的同时,也调用System.currentTimeMillis(),然后将两者相减即可。
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,