0

カウントダウンタイマーアプリを作成していて、ユーザーがボタンを押してタイマーを開始できるようにします。ボタンを押すと、タイマーがカウントダウンします(作業セッション)。その後、ユーザーはタイマーが終了するのを待つか、同じボタンをクリックしてタイマーをリセットできます(「リセット」というラベルが付け直されています)。

タイマーが終了するのを待つと、別のタイマーが開始されます(短い時間間隔-別名ブレークセッション)。この時点で、ボタンを押すと(「休憩の終了」と改名)、休憩タイマーがキャンセルされ、別の作業セッションが開始されます。

なんらかの理由でボタンをクリックしてもタイマーがスタートしません。私の現在のコード設定では。私はタイマーとボタンをテストしました、そして私はそれらが働くことを知っています。

何らかの理由で、私のonClickメソッドがタイマーを開始しません、何か助けはありますか?CountDownTimerクラスに何かする必要がありますか?

public class SimplyPomodoroActivity extends Activity implements OnClickListener {

    TextView tvTimer; // used to update timer...
    Button btStart; //main button
    Vibrator vibrator; // vibrate when button is pressed..

    boolean off = true;
    boolean working = false;



    long longBreak = 8000; // 900000;
    long shortBreak = 6000; // 300000;
    long workTime = 10000; // 1500000;

    long v = 100; // vibration sequence
    int pomoCount = 1; // keep track of the number of Pomodoros...



    // PomoTimer pomoBreak = new PomoTimer(startTime, interval);

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

        initialiaze(); //connect xml to java code and setup listener

    }

    private void initialiaze() {
        tvTimer = (TextView) findViewById(R.id.tvTimer);
        btStart = (Button) findViewById(R.id.btStart);
        vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        btStart.setOnClickListener(this); // register listener
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        vibrator.vibrate(v);

        //Do stuff
        if(off){ //Turn on
            //change text
            //start work timer --> work timer will go to break automatically
            off = false;
            working = true;
            btStart.setText("Reset");
            workCounter.start();
        }

        if(working){ 
            //turn off
            btStart.setText("Start");
            workCounter.cancel();
            working = false;
            off = true;
        }else if(!working && !off){ 
            //end break
            shortBreakCounter.cancel();
            btStart.setText("Reset");
            workCounter.start();
        }

    }

    CountDownTimer workCounter = new CountDownTimer(workTime, 1000) {

        public void onTick(long millisUntilFinished) {
            displayRemainingTime(millisUntilFinished);
        }

        public void onFinish() {
            tvTimer.setText("0:00");
            working = false;
            pomoIncrement();
            btStart.setText("End Break");
            shortBreakCounter.start();
        }
    };

    CountDownTimer shortBreakCounter = new CountDownTimer(shortBreak, 1000) {

        public void onTick(long millisUntilFinished) {
            displayRemainingTime(millisUntilFinished);
        }

        public void onFinish() {
            working = true;
            pomoIncrement();
            btStart.setText("Reset");
            workCounter.start();
        }
    };

    CountDownTimer longBreakCounter = new CountDownTimer(longBreak, 1000) {

        public void onTick(long millisUntilFinished) {
            displayRemainingTime(millisUntilFinished);
        }

        public void onFinish() {
            pomoIncrement();

        }
    };


    private void pomoIncrement() {
        // increment by one, reset at 8
        pomoCount += (pomoCount > 8) ? -pomoCount : 1;
    }

    private void displayRemainingTime(long millisUntilFinished) {

        // TODO Auto-generated method stub
        int sec = (int) (millisUntilFinished / 1000) % 60;
        int min = (int) ((millisUntilFinished / 1000) / 60);
        tvTimer.setText("" + min + ":" + sec);
    }
}

if(off){...}ステートメントでカウントダウンタイマーが開始されません...他の構成に変更しても、現在実行中のCountDownTimerがキャンセルされません。

4

1 に答える 1

0

追加する

return; 

btStart.setText("Reset");
workCounter.start();

そのため、開始直後にタイマーがキャンセルされることはありません。

于 2012-04-10T14:38:50.580 に答える