【问题标题】:Toggle Button in Android AppAndroid 应用程序中的切换按钮
【发布时间】:2012-02-14 07:05:10
【问题描述】:

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

【问题讨论】:

    标签: java android button toggle


    【解决方案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;
          }
        }
    });
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      编辑:重新调整答案

      我注意到您的按钮有 2 个 onClick。

      我推荐以下:

      1) 创建一个名为“isCounting”的布尔值 2)在您的活动 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)在您的 Button 的 onClick 中检查“isCounting”

      if (isCounting == FALSE)
      {
         cdt.start();
         isCounting = TRUE;
      }
      
      else
      {
      
         cdt.cancel();
         isCounting = FALSE;
         button.setText("PRESS ME");
      }
      

      【讨论】:

      • 好的,很好。我添加了这个类,它工作正常。但是我将如何使用这个来恢复按钮呢?我真的很难弄清楚。
      • 你能不能(在你的 onClick 里面) button.setText("PRESS ME");在取消()之后;
      • 但这不会只是改变按钮的文本而不允许再次按下它吗?这意味着它不会重新开始倒计时。
      • 刚刚修改了我的答案,因为我注意到您有 2 个 onClickListeners
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2022-11-14
      相关资源
      最近更新 更多