2012-02-14 89 views
0

我試圖做一個正常的按鈕,功能像一個切換按鈕,但我遇到了一些問題。我是Java和OOP的新手,所以要溫和。在Android應用程序切換按鈕

起初,我的按鈕會說「按我。」。當我按下按鈕時,我想在按鈕上出現一個倒計時,並且它正在倒計時,我希望能夠再次按下取消倒計時並恢復到原始狀態。到目前爲止,我可以按下按鈕,啓動倒計時並取消它,但我無法弄清楚如何使按鈕恢復到起始樣式「按我」(如果它再次按下,倒數計時器將重新開始,它可能會被取消)。

我嘗試使用切換按鈕,但我覺得我很接近得到這個工作。有任何想法嗎?這是我與現在使用的代碼:

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(); 
     } 
    }); 

回答

1

我想我只想保持一個boolean標誌以查看計時器是否正在運行。類似的東西(未測試)

button.setOnClickListener(new OnClickListener() { 
    private boolean running = false; 
    private CountDownTimer timer; 
    @Override 
    public void onClick(View v) { 
     if(!running) 
     { 
     running = true; 
     timer = new CountDownTimer(4000, 1000) { 

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

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

      } 
     }.start(); 
     } 
     else 
     { 
     timer.cancel(); 
     button.setText("Press Me"); 
     running = false; 
     } 
    } 
}); 
+0

這個作品完美!謝謝! – mkyong 2012-02-17 10:08:55

0

如果我理解正確的問題:倒計時計時器顯示的是,當你取消你希望計時器停止按鈕可以返回到「PRESS ME」

CountDownTimer有一個「功能」,因此它不能從OnTick中取消自己...我知道這是堅果。

幸運的是,有人在課堂上寫下了替代性的下降。 https://gist.github.com/737759

我在我的一個應用程序中使用這個類。只需在您的項目中創建一個名爲「CountDownTimer」的類。刪除你的導入「android.os.CountDownTimer」,它應該工作。

編輯:RE調整ANSWER

我注意到,你有2個的onClick對按鈕。

我提出以下建議:

1)創建一個布爾稱爲 「isCounting」 2)設置 「isCounting」 在您的活動onCreate方法 3 FALSE)創建CountDownTimer分別

CountDownTimer cdt; 

// setup countdown timer 
cdt = new CountDownTimer(intMilli, 1000) 
{ 

    @Override 
    public void onFinish() 
    { 
     //your code 
    } 

    @Override 
    public void onTick(long millisUntilFinished) 
    { 
     //your code 
    } 
}; 

4)在您的按鈕的onClick檢查「isCounting」

if (isCounting == FALSE) 
{ 
    cdt.start(); 
    isCounting = TRUE; 
} 

else 
{ 

    cdt.cancel(); 
    isCounting = FALSE; 
    button.setText("PRESS ME"); 
} 
+0

好吧。我添加了這個類,它工作正常。但我將如何去使用這個恢復按鈕?我真的很努力想出來。 – mkyong 2012-02-14 07:59:07

+0

你可以(在你的onClick)button.setText(「PRESS ME」);取消()後; – Tony 2012-02-14 08:30:01

+0

但是,這不就是改變按鈕的文字,不允許再次按下按鈕嗎?這意味着它不會開始倒計時。 – mkyong 2012-02-14 08:38:28