how to start new countdowntimer in dialog box with

2019-01-29 13:03发布

问题:

In my app i have Countdown Timer and dialog box in same class. when someone press quit button dialog box opens and in it 2 buttons yes and no. I want when someone press quit button timer pause and if someone press no button its resume with remaining seconds. I know for this i have to finish this timer and create new timer with remaining seconds. But i am unable to get remaining seconds. If someone know how to do this please help me.

Code of countdown timer-

counterTimer = new CountDownTimer(15000, 1000) {
        public void onFinish() {                
                if(currentGame.getRound()==20)
                {
                nextBtn1.setEnabled(false);
                nextBtn2.setEnabled(false);
                nextBtn3.setEnabled(false);
                nextBtn4.setEnabled(false);
                nextBtn5.setEnabled(false);
                final Handler handle = new Handler();
                Toast.makeText(QuestionActivity.this, "Time's Up", Toast.LENGTH_SHORT).show();
                Runnable delay = new Runnable() {
                    public void run() {
                        System.exit(0);
                    }
                };
                handle.postDelayed(delay,3000);
                }

                else if(currentGame.getRound()==0)
                {
                currentGame.decrementScore();
                final Handler handle = new Handler();
                Runnable delay = new Runnable() {
                    public void run() {
                        processScreen();
                    }
                };
                handle.postDelayed(delay,3000);
                }

                else if(currentGame.getRound()<=19)
                {
                        nextBtn1.setEnabled(false);
                        nextBtn2.setEnabled(false);
                        nextBtn3.setEnabled(false);
                        nextBtn4.setEnabled(false);
                        nextBtn5.setEnabled(false);
                        currentGame.decrementScore();
                        final Handler handle = new Handler();
                        Toast.makeText(QuestionActivity.this, "Time's Up", Toast.LENGTH_SHORT).show();
                        Runnable delay = new Runnable() {
                            public void run() {
                                processScreen();
                            }
                        };
                        handle.postDelayed(delay,3000);
                 }
            }

            public void onTick(long millisUntilFinished) {
                TextView time = (TextView) findViewById(R.id.timers);
                time.setText( ""+millisUntilFinished/1000);
                                }
        };
        counterTimer.start();
    }

Code for Dialog Box-

if(arg0.getId()==R.id.quit)
        {       
            Button yes, no;
            final Dialog dialog = new Dialog(this, R.style.FullHeightDialog); 
            dialog.setContentView(R.layout.dialog1); 
            dialog.setCancelable(true);
            counterTimer.cancel(); 
            //to set the message
            TextView message =(TextView) dialog.findViewById(R.id.tvmessagedialogtext);
            message.setText("Are you sure you want to Exit?");
            yes = (Button) dialog.findViewById(R.id.bmessageDialogYes);
            yes.setOnClickListener(new OnClickListener() {
            public void onClick(View v) 
            {
             finish();
             startActivity(new Intent(QuestionActivity.this, SplashActivity.class));             
                    }
            });

             no = (Button) dialog.findViewById(R.id.bmessageDialogNo);
             no.setOnClickListener(new OnClickListener() {
             public void onClick(View v)  
             {
             dialog.dismiss();
             nextBtn1.setEnabled(true);
             nextBtn2.setEnabled(true);
             nextBtn3.setEnabled(true);
             nextBtn4.setEnabled(true);
             }
             });
             dialog.show();
    }

回答1:

Dialog Box Code-

 private long remaingtime, starttime = 15000;
    MyCounter timer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.question);
    nextBtn1 = (Button) findViewById(R.id.answer1);
            nextBtn1.setEnabled(true);
            nextBtn1.setOnClickListener(this);
            nextBtn2 = (Button) findViewById(R.id.answer2);
            nextBtn2.setEnabled(true);
            nextBtn2.setOnClickListener(this);
            nextBtn3 = (Button) findViewById(R.id.answer3);
            nextBtn3.setEnabled(true);
            nextBtn3.setOnClickListener(this);
            nextBtn4 = (Button) findViewById(R.id.answer4);
            nextBtn4.setEnabled(true);
            nextBtn4.setOnClickListener(this);
            nextBtn5 = (Button) findViewById(R.id.quit);
            nextBtn5.setEnabled(true);
            nextBtn5.setOnClickListener(this);
    timer = new MyCounter(starttime, 1000);
    timer.start();
    }

    if(arg0.getId() == R.id.quit)
            {   
                timer.cancel();
                final Dialog dialog = new Dialog(this, R.style.FullHeightDialog); 
                dialog.setContentView(R.layout.dialog1);
                dialog.setCancelable(true);
                //to set the message
                TextView message =(TextView) dialog.findViewById(R.id.tvmessagedialogtext);
                message.setText("Are you sure you want to Exit?");
                yes = (Button) dialog.findViewById(R.id.bmessageDialogYes);
                yes.setOnClickListener(new OnClickListener() {
                public void onClick(View v) 
                {
                 startActivity(new Intent(QuestionActivity.this, SplashActivity.class));    
                 finish();
                }
                });

                no = (Button) dialog.findViewById(R.id.bmessageDialogNo);
                no.setOnClickListener(new OnClickListener() {
                public void onClick(View v)  
                {
                dialog.dismiss();
                timer = new MyCounter(remaingtime, 1000);
                timer.start();           
                nextBtn1.setEnabled(true);
                nextBtn2.setEnabled(true);
                nextBtn3.setEnabled(true);
                nextBtn4.setEnabled(true);
                }
                });
                dialog.show();
            }

Count Down Timer Code-

public class MyCounter extends CountDownTimer
{
       public MyCounter(long millisInFuture, long countDownInterval)
            {
                super(millisInFuture, countDownInterval);
            }

            @Override
            public void onTick(long millisUntilFinished) 
            {
                remaingtime = millisUntilFinished;
                time = (TextView) findViewById(R.id.timers);
                time.setText(""+millisUntilFinished/1000);
            }

            @Override
            public void onFinish()
            {
                if(currentGame.getRound()==20)
                {
                nextBtn1.setEnabled(false);
                nextBtn2.setEnabled(false);
                nextBtn3.setEnabled(false);
                nextBtn4.setEnabled(false);
                nextBtn5.setEnabled(false);
                final Handler handle = new Handler();
                Toast.makeText(QuestionActivity.this, "Time's Up", Toast.LENGTH_SHORT).show();
                Runnable delay = new Runnable() {
                    public void run() {
                        System.exit(0);
                    }
                };
                handle.postDelayed(delay,3000);
                }

                else if(currentGame.getRound()==0)
                {
                currentGame.decrementScore();
                final Handler handle = new Handler();
                Runnable delay = new Runnable() {
                    public void run() {
                        processScreen();
                    }
                };
                handle.postDelayed(delay,3000);
                }

                else if(currentGame.getRound()<=19)
                {
                nextBtn1.setEnabled(false);
                nextBtn2.setEnabled(false);
                nextBtn3.setEnabled(false);
                nextBtn4.setEnabled(false);
                nextBtn5.setEnabled(false);
                currentGame.decrementScore();
                final Handler handle = new Handler();
                Toast.makeText(QuestionActivity.this, "Time's Up", Toast.LENGTH_SHORT).show();
                Runnable delay = new Runnable() {
                public void run() 
                {
                  processScreen();
                }
                };
            handle.postDelayed(delay,3000);
            }
         }
     }


回答2:

Just count the seconds yourself on each tick and use them later to create a new timer.



回答3:

try like that

private final long interval = 1000;
long millisLeft = 90000;

public class MalibuCountDownTimer extends CountDownTimer {

        public MalibuCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {
            Toast.makeText(context, "Time's up!", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onTick(long millisUntilFinished) {
            millisLeft = millisUntilFinished;
            System.out.println("The milies left is" + millisLeft);  
        }
    }

    @Override
    public void onResume() {
        super.onResume();

            countDownTimer = new MalibuCountDownTimer(millisLeft, interval);
            countDownTimer.start();
    }

    public void onPause() {
        super.onPause();
        countDownTimer.cancel();
    }