0

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

}

4

1 に答える 1

0

OK、私はそれを行う方法を見つけました。これは私を助けました:http://iqwen.net/question/53767

于 2013-01-20T15:06:26.007 に答える