2012-02-14 92 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