刚刚接触关于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.DialogInterface;
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.

解决方案 »

  1.   

    建议加入LOG信息打印一下,看整个过程是如何调用的。有的按钮按下去和弹起来都要调用函数的。
      

  2.   


    应该不会这样,因为Chronometer是依靠几个方法来实现,跟按钮控件没有直接的关系
      

  3.   

    没用过2.2 ,但我感觉LZ说的那个问题应该不存在 ,不会这样设计 ,而且你确定你每次按下按钮的差距都刚好合适?!都差0.11 不可能是吧。可以用LS的方法  ,自己检查一下 , 具体过程是怎么的。LOG打印一下看看。
      

  4.   

    我想问一下你的android2.2是如何配置的,需要哪些文件,分别怎么放置?谢谢
    希望您能解答
      

  5.   

    这个是正常的功能. 通一般电子跑表是一样的, stop只是停止的时间, 但并没有停止计时.
    你所期望的功能, 可以使用setBase().
      

  6.   

    setBase()应该如何设置????
      

  7.   


    如果你想用setBase将计时器清零的话,可以用下面的语句:setBase(SystemClock.elapsedRealtime());
      

  8.   

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

  9.   

    文档上系的很清楚。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.
      

  10.   

    求教各位大侠,Chronometer的计时器停止计时后,如何保存所用时间?
      

  11.   


    如果要记时间的话,你直接用java的代码System.currentTimeMillis()直接取系统时间好了。Chronometer其实在实际中,几乎没有太多的用武之地。通常的做法是,在调用Chronometer的start()方法的同时,调用System.currentTimeMillis(),在调用Chronometer的stop()方法的同时,也调用System.currentTimeMillis(),然后将两者相减即可。