Android アプリを開発していますが、クロノメーターに問題があります。また、onChronometerTick メソッドが呼び出されると、60 秒目に TextView が更新されるはずですが、最初は 58 秒目に更新されます。また、クロノメーターを一時停止して再度開始すると、別の時間に更新されます。クロノメーターを起動すると、onChronometerTick メソッドが 2 回呼び出されることがわかりました。これが問題の原因です。誰かが私を助けることができますか?ありがとう!
これが私のコードです:
int br = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bProg = (Button) findViewById(R.id.bProgram);
bProg.setOnClickListener(this);
tv = (TextView) findViewById(R.id.textView1);
chrono = (Chronometer) findViewById(R.id.chronometer);
chrono.setBase(SystemClock.elapsedRealtime());
chrono.setOnChronometerTickListener(this);
chrono.stop();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bProgram:
Log.d(TAG, "bProgram Clicked");
checkButton();
// Change the electricity consumption for the given program
changeConsumption();
calculateSecondPrice();
tvCons.setText(String.valueOf(consumption * 1000 + " W"));
tvPrice.setText(String.valueOf(price + " lv."));
if (prog > 0) {
startChronometer();
}
if (prog == 0) {
pauseChronometer();
}
break;
}
}
private void pauseChronometer() {
timeWhenStopped = chrono.getBase() - SystemClock.elapsedRealtime();
chrono.stop();
}
private void startChronometer() {
if (prog == 1) {
chrono.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
chrono.start();
}
}
@Override
public void onChronometerTick(Chronometer chronometer) {
br++;
totalPrice += secondPrice;
if (br == 60) {
br = 0;
tv.setText(String.valueOf((double) (totalPrice) / 1000000));
}
}
}