如何在Android中交替实现两个倒计时

如何在Android中交替实现两个倒计时,android,countdowntimer,Android,Countdowntimer,我已经实现了一个计数器和第一个计数器的onFinish(),我启动了第二个计数器,但第一个计数器无法完成。文本“Bye Guyz”保留了一段时间,因此如何完成文本 请帮帮我 提前谢谢 代码:- counter= new CountDownTimer(10000, 1000) { public void onTick(long millisUntilFinished) { if (count == 0) {

我已经实现了一个计数器和第一个计数器的onFinish(),我启动了第二个计数器,但第一个计数器无法完成。文本“Bye Guyz”保留了一段时间,因此如何完成文本

请帮帮我

提前谢谢

代码:-

counter= new CountDownTimer(10000, 1000) {

                public void onTick(long millisUntilFinished) {
                    if (count == 0) {
                        tv.setText("First counter");
                        tv2.setVisibility(View.VISIBLE);
                        tv2.setText("Hello Guyz");
                    }
                }

                public void onFinish() {
                    if(!flag) {
                        tv2.setText("Bye Guyz");
                        count = 0;
                        try {
                            counter.cancel();
                        }catch (Exception e){}
                    }
                    else if(flag) {
                       counter1 = new CountDownTimer(9000, 1000) {
                            public void onTick(long millisUntilFinished) {
                                flag = false;
                                tv.setText("Second counter");
                        tv2.setVisibility(View.VISIBLE);
                        tv2.setText("Hello Girls");
                                count = 0;
                            }

                            public void onFinish() {
                                tv2.setVisibility(View.VISIBLE);
                                tv2.setText("Bye Girls");
                                count = 0;
                            }
                        }.start();
  • 您是否“调试”代码以确保代码到达
    counter1=新的倒计时(9000,1000)

  • 您确定第一个
    计数器
    到达
    onFinish()
    标志
    变量为真吗

  • 当计数器显然已经结束时,为什么要调用
    onFinish()
    中的
    counter.cancel()

public void onFinish(){
如果(!标志){
tv2.setText(“再见”);
计数=0;
试一试{
counter.cancel();
}捕获(例外e){}

}

如果您说您的tv2显示“Bye Guyz”,这意味着您的标志设置为false,因此“else If”部分不会执行。onFinish()只执行一次,因此您需要确保标志设置为true以启动第二个计数器


另外,您不应该取消onFinish()中的计数器,因为它已经完成。

以下是我的选择

创建自定义
计数器
扩展
线程

class Counter extends Thread {
    private long timeOne, timeTwo;
    private OnCounterFinishedListener mCounterFinishedListener;
    private Thread t;
    Activity activity = null;


    Counter(Context context){
        t = new Thread(this);
        activity = (Activity)context;
    }

    @Override
    public void run() {
        try {
            sleep(timeOne);
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mCounterFinishedListener.firstCounterFinished();
                }
            });

            sleep(timeTwo);
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mCounterFinishedListener.secondCounterFinished();
                }
            });

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

     void setTimes(long timeOne, long timeTwo){
        this.timeOne = timeOne;
        this.timeTwo = timeTwo;
    }

    public void start(OnCounterFinishedListener listener){
        mCounterFinishedListener = listener;
        t.start();
    }




    interface OnCounterFinishedListener{
        void firstCounterFinished();
        void secondCounterFinished();
    }
}
然后,在主线程内,您可以按如下方式启动此计数器

final Counter counter = new Counter(this);
counter.setTimes(5000, 5000);
counter.start(new Counter.OnCounterFinishedListener() {
    @Override
    public void firstCounterFinished() {
        // Update your first TextView
    }

    @Override
    public void secondCounterFinished() {
        // Update your second TextView
    }
});

代码已完成?如果(标志)未关闭,
else。某个变量使我无法确定,
计数器和
标志从何而来?