在Android应用程序中切换按钮

时间:2012-02-14 07:05:10

标签: java android button toggle

我正在尝试制作一个常规按钮,其功能类似于切换按钮,但我遇到了一些问题。我是Java和OOP的新手,所以要温柔。

首先我的按钮会说“按我”。当按下我的按钮时,我想要在按钮上显示倒计时,当它倒计时时,我希望能够再次按下它以取消倒计时并恢复到其原始状态。截至目前,我可以按下按钮,启动倒计时并取消它,但我无法弄清楚如何使按钮恢复到起始状态“按我”(如果再次按下,倒计时)将重新开始,它可以再次取消)。

我尝试使用切换按钮,但我觉得我非常接近于让它工作。有任何想法吗?这是我现在正在使用的代码:

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

2 个答案:

答案 0 :(得分: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;
      }
    }
});

答案 1 :(得分:0)

如果我正确理解了问题:倒数计时器正在显示,当您取消时,您希望计时器停止并且按钮恢复为“按我”

CountDownTimer有一个“功能”,它不能从OnTick取消自己...我知道这很疯狂。

幸运的是,有人在课堂上写下了替代课程。 https://gist.github.com/737759

我在我的一个应用程序中使用此类。只需在项目中创建一个名为“CountDownTimer”的类。删除“android.os.CountDownTimer”的导入,它应该可以工作。

编辑:重新调整答案

我注意到你有2个点击按钮。

我建议如下:

1)创建一个名为“isCounting”的布尔值 2)在您的Activities onCreate方法中将“isCounting”设置为FALSE 3)单独创建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");
}