请帮助我,我做了我的拳头安卓应用程序,计时器,但这里有些错误,我不知道是什么。当我点击开始时,天文台运行正常,但当我点击停止(或重置),然后再次开始继续它将是00:0(,00:0 *,00:0 /,...
我的代码:
import android.os.Bundle;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;
/**
* Created by Admin on 6/26/2015.
*/
public class Tab1 extends Fragment implements View.OnClickListener {
private Button buttonStart;
private Button buttonStop;
private Button buttonReset;
private Chronometer chronometerRun;
long time = 0;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.tab_1,container,false);
buttonStart=(Button)v.findViewById(R.id.buttonStrart);
buttonStop=(Button)v.findViewById(R.id.buttonStop);
buttonReset=(Button)v.findViewById(R.id.buttonReset);
chronometerRun=(Chronometer)v.findViewById(R.id.chronometerRunning);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
buttonReset.setOnClickListener(this);
return v;
}
public void onClick(View v) {
switch(v.getId())
{
case R.id.buttonStrart:
chronometerRun.setBase(SystemClock.elapsedRealtime() + time);
chronometerRun.start();
break;
case R.id.buttonStop:
time = chronometerRun.getBase()+SystemClock.elapsedRealtime();
chronometerRun.stop();
break;
case R.id.buttonReset:
chronometerRun.setBase(SystemClock.elapsedRealtime());
chronometerRun.stop();
break;
}
}
}
答案 0 :(得分:0)
我从您的代码中了解到,您正在以错误的方式使用setBase
方法。它允许您设置计时器自动作为参考的基准时间。然后,Chronometer通过将当前时间与setBase
方法中设置的值区分开来自动更新其视图,即Chronometer将当前时间设置为SystemClock.elapsedRealtime() - getBase()
。
由于您要将time
添加到SystemClock.elapsedRealtime()
,因此当time
非零时,它会为当前时间提供负值。
相反,你应该做的是在停止时将time
设置为SystemClock.elapsedRealtime()-chronometerRun.getBase()
,以便保持自计时器开始以来经过了多长时间,然后从{{减去time
1}}设置基数以保持暂停时的最后时差,并且您应该在重置时将SystemClock.elapsedRealtime()
设置为time
,以便从零开始计时器,即将基准时间设置为当前时间。
以下开关案例代码正常工作:
0
注意:在调试时使用switch(v.getId())
{
case R.id.buttonStart:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
chronometerRun.setBase(SystemClock.elapsedRealtime()-time) ;
chronometerRun.start();
break;
case R.id.buttonStop:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
time = SystemClock.elapsedRealtime()-chronometerRun.getBase();
chronometerRun.stop();
break;
case R.id.buttonReset:
Log.i("test",""+SystemClock.elapsedRealtime() + time);
time=0;
chronometerRun.setBase(SystemClock.elapsedRealtime());
chronometerRun.stop();
break;
}
观察相关变量以了解它们的变化情况总是很有用。
我在所有案例陈述后面添加了Log.i("TAG",""+variableToWatch)
,以查看Log.i("test",""+SystemClock.elapsedRealtime() + time);