UI线程中的Android CountDown Timer

时间:2015-02-02 21:41:43

标签: android ui-thread

我尝试编码可以重复多次的CountDownTimer。我的代码工作得很好......但只有一次。我不明白为什么重复动作没有完成:-( 这是我的代码:

package com.bigmat.MyTimer;

import android.app.Activity;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.*;

public class MainActivity extends Activity {

    private TextView inputDuration;
    private TextView tvCdTimer;
    private Button start;
    CountDownTimer myCdTimer;
    NumberPicker npDuration;
    CheckBox isRepeat;
    TextView tvRepeat;
    int nbRepeat;
    int count;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        inputDuration = (TextView) findViewById(R.id.tvInputDuration);
        tvCdTimer = (TextView) findViewById(R.id.tvCdTimer);
        start = (Button) findViewById(R.id.btStart);
        npDuration = (NumberPicker) findViewById(R.id.npDuration);
        npDuration.setMaxValue(60);
        npDuration.setMinValue(0);
        isRepeat = (CheckBox) findViewById(R.id.cbRepeat);


        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count=0;
                tvRepeat = (TextView) findViewById(R.id.nbRepeat);
                if (tvRepeat.getText().toString().length() > 0) {
                    nbRepeat = Integer.parseInt(tvRepeat.getText().toString());
                } else {
                    nbRepeat = 1;
                }
                runTimer();
            }
        });
    }



    public void runTimer(){

        Log.i("CDT", "value of npDuration is : "+npDuration.getValue());

        if (npDuration.getValue() > 0 && nbRepeat > 0) {

                // create a timer
                myCdTimer = new CountDownTimer(npDuration.getValue()*1000, 1000) {
                    public void onTick(long millisUntilFinished) {
                        tvCdTimer.setText("" + millisUntilFinished / 1000);
                    }

                    public void onFinish() {
                        tvCdTimer.setText("Done ! ");
                        try {
                            Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                            Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
                            r.play();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        count++;
                        //condition

                        if (count < nbRepeat) {
                            Log.i("MyTimer", "value of nbRepeat :" + nbRepeat + " value of count : " + count);
                            myCdTimer.cancel();
                            myCdTimer.start();
                        }
                    }
                }.start();
        } else {
            Toast.makeText(getApplicationContext(), "Timer is set on 0 seconds !!!", Toast.LENGTH_LONG).show();
        }
    }
}

提前致谢!

0 个答案:

没有答案