Java Android应用程序中的切换按钮

Java Android应用程序中的切换按钮,java,android,button,toggle,Java,Android,Button,Toggle,我正在尝试制作一个功能类似于切换按钮的常规按钮,但我遇到了一些问题。我不熟悉Java和OOP,所以要温柔 首先,我的按钮会说“按我”。当我的按钮被按下时,我希望按钮上显示一个倒计时,当它倒计时时,我希望能够再次按下它以取消倒计时并恢复到其原始状态。到目前为止,我可以按下按钮,启动倒计时并取消它,但我不知道如何使按钮恢复到“按下我”的开始外观(如果再次按下,倒计时将重新开始,并且可以再次取消) 我试着用一个切换按钮,但我觉得我很快就能让它工作了。有什么想法吗?下面是我正在使用的代码: bu

我正在尝试制作一个功能类似于切换按钮的常规按钮,但我遇到了一些问题。我不熟悉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();
        }
    });

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

倒计时有一个“功能”,它不能取消自己从点击。。。我知道这是胡说八道

幸运的是,有人在课堂上写了一篇替换文章。

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

编辑:重新调整答案

我注意到你有两个按钮

我建议如下:

1) 创建一个名为“isCounting”的布尔值 2) 在Activities onCreate方法中将“isCounting”设置为FALSE 3) 分别创建倒计时

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”


我想我应该保留一个
布尔值
标志,看看计时器是否正在运行。类似的东西(未测试)


好的,太好了。我添加了这个类,它工作正常。但是我该如何用这个来恢复按钮呢?我真的很难弄明白。你能(在你的onClick里)按一下按钮吗;取消后();但这难道不会改变按钮的文本,不允许再次按下按钮吗?这意味着它不会开始倒计时。只是修改了我的答案,因为我注意到你有两个onclick听众
if (isCounting == FALSE)
{
   cdt.start();
   isCounting = TRUE;
}

else
{

   cdt.cancel();
   isCounting = FALSE;
   button.setText("PRESS ME");
}
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;
      }
    }
});