2012-02-12 2 views
1

빠른 질문은 다음과 같습니다. 다음 코드는 대부분 작동하지만, 카운트 다운 중에 클릭하면 원래 상태로 돌아가고 싶습니다. 어떤 제안?카운트 다운 중 취소 버튼

  button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       new CountDownTimer(4000, 1000) { 

        @Override 
        public void onFinish() { 
         button.setText("SENT");     

        } 

        @Override 
        public void onTick(long sec) { 
         button.setText("CANCEL (" + sec/1000 + ")"); 
         button.setOnClickListener(new OnClickListener() { 

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

          } 

         }); 

        } 
       }.start(); 
      } 
     }); 

버튼을 누르기 전에 "Push Me"라고 말합니다. 버튼을 누르면 카운트 다운이 시작되고 버튼의 텍스트가 초 단위로 변경됩니다 (CANCEL (3), CANCEL (2), CANCEL (1)). 카운트 다운이 끝나면 버튼이 텍스트를 "SENT"로 업데이트합니다. 카운트 다운 (onTick) 중에 버튼을 누르면 카운트 다운이 취소됩니다. 나는 그것이 "푸시 미 (Push Me)"상태로 돌아가는 방법을 알고 싶습니다. 기본적으로 다시 눌러서 새로운 카운트 다운을 시작할 수 있습니다. 어떤 도움을 주시면 감사하겠습니다!

답변

2

타이머 안에 새로운 onClickListener가 없어야합니다. 그러면 훨씬 많은 메모리가 필요하므로 예기치 않은 결과가 발생할 수 있습니다. 대신 타이머가 켜져 있으면 부울 값을 사용하고 기존 버튼의 onClickListener를 사용하는 것이 좋습니다. 이 타이머를 사용하는 경우 타이머가 전역으로 선언되어 있는지 확인하십시오. 어떻게 작동하는지 예가 나와 있습니다.

button.setOnClickListener(new OnClickListener { 
     if(timerIsOn){ 
      if(timer != null){ 
      timer.cancel(); 
      timerIsOn = false; 
      } 
     } 
     else{ 
     timerIsOn = true; 
     //start the timer and do whatever else 
     } 
    } 
+0

하지만 카운트 다운 중에는 동일한 버튼을 클릭해야합니다. 나는 당신이 제공 한 것이 도움이 될 것이라고 생각하지만 카운트 다운 중에 클릭했는지 확인하기 위해 타이머 내부에 청취자가 여전히 필요하지 않습니까? – mkyong

+0

onClickListeners가 작동하는 방식으로, 언제든지보기를 누르면 onClick 메서드에 요청을 보냅니다. 부울 값을 사용할 때의 희망은 눌렀을 때 수행 할 작업을 이해하는 것입니다. 카운트 다운 중에 버튼을 누르면 부울이 참이되고 카운트 다운 중에 원하는 로직을 수행합니다. 그렇지 않으면 정상적으로 작동합니다. – Flynn