我可以拨打'取消()'在setOnClickListener里面的先前方法?

时间:2017-05-19 02:37:04

标签: java android

我正在制作一个简单的测验应用程序,其中包含10个问题,每个问题都有10秒倒数计时器。评分有效,而每个问题的答案正确地乘以CountDownTimer方法的剩余时间,因此它将是:score = answer * timeLeft;我从CountDownTimer成功获取了timeLeft的值。我设定的时间结束了,它会自动打算下一个问题。问题是,当我选择正确答案并点击下一个按钮时,它成功获取timeLeft值并将其乘以1(每个正确答案将为1点),但倒数计时器仍然一直持续到超过,所以当我已经移动到通过点击下一个按钮的另一个问题,上一个问题的时间仍然在运行,当它不幸的时候,它转移到上一个问题,时间尚未结束。我如何从setOnClickListener里面的CountDownTimer方法调用cancel()?

    public void setTimer() {                                                        

    //Initialize a new CountDownTimer instance                                  
   new CountDownTimer(millisInFuture,countDownInterval){                        

            public void onTick(long millisUntilFinished){                           
                //do something in every tick                                        
                //Display the remaining seconds to app interface                    
                //1 second = 1000 milliseconds                                      
                cDown.setText("" + millisUntilFinished / 1000);                     
                timeLeft = millisUntilFinished / 1000;                              

            }                                                                       
            public void onFinish(){                                                 
                //Do something when count down finished                             
                cDown.setText("NEXT!");                                             
                Intent intent = new Intent(TestActivity1.this,TestActivity2.class); 
                intent.putExtra("score", score);                                    
                startActivity(intent);                                              
                finish();                                                           
                timeLeft = 0;                                                       
            }                                                                       


        }.start();                                                                  

        bNext.setOnClickListener(new View.OnClickListener() {                       

            @Override                                                               
            public void onClick(View v) {                                           

                cancel();                                                           

                timeLeft = millisUntilFinished;                                     
                Intent intent = new Intent(TestActivity1.this,TestActivity2.class); 
                intent.putExtra("score", score);                                    
                startActivity(intent);                                              
                finish();                                                           
                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);         

            }                                                                       

        });                                                                         

    } 

2 个答案:

答案 0 :(得分:1)

您需要为倒数计时器存储一个变量,以便可以调用和取消它。

final CountDownTimer timer = new CountDownTimer(millisInFuture,countDownInterval){......}
timer.start();

bNext.setOnClickListener(new View.OnClickListener() {                       

   @Override                                                               
   public void onClick(View v) {                                                   
     timer.cancel();
           .........
   }                                                                       

});                                                                         

答案 1 :(得分:0)

而不是直接将其创建为new CountDownTimer, 首先定义一个全局变量,如CountDownTimer cd

然后你可以随时使用cd的方法。