代码之家  ›  专栏  ›  技术社区  ›  Mark Denom

如何使用计时器禁用按钮并在重新启动时保持禁用?

  •  3
  • Mark Denom  · 技术社区  · 6 年前

    所以我的目标是单击一个按钮,禁用它并启动一个计时器,一旦计时器启动,启用该按钮。简单的权利?你会这样做的。

    button1.onClick { 
    
    button1.setEnabled(false);
        new CountDownTimer(60000, 1000) { //Set Timer for 5 seconds
                public void onTick(long millisUntilFinished) {
                }
    
                @Override
                public void onFinish() {
                       button1.setEnabled(true);
                }
            }.start()
    
    }
    

    然而。。如果用户在计时器运行时关闭应用程序,按钮将再次启用,重新启动计时器。因此,用户无需等待60秒,只需关闭应用程序并在10秒内打开它。

    所以我的问题是,我如何禁用按钮60秒,并保持它的禁用,即使用户关闭和打开应用程序,直到60秒过去?

    2 回复  |  直到 6 年前
        1
  •  2
  •   GhostCat    6 年前

    你必须 坚持 数据存储中的信息,即使在应用程序关闭的情况下也能保存这些信息。

    一种方法是使用 https://developer.android.com/training/data-storage/shared-preferences

    您必须在启动计时器时获得时间戳,或者计算计时器的“结束时间”。然后保存这些信息,当应用程序启动时,首先检查您的首选项是否包含这样的时间戳。如果是这样的话,你要检查你是否还在那个“定时”窗口中。

    关键的是要记住:当计时器启动时,你必须删除持久化的信息;如果有人同时更改系统时钟,你也会遇到问题。处理这件事是可能的,但需要更多的努力。

        2
  •  -3
  •   shekhar pande    6 年前

    用handler试试这个。

     btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                btn.setEnabled(false);
    
             new Handler().postDelayed(new Runnable() {
    
                @Override
                public void run() {
                    // This method will be executed once the timer is over
                        btn.setEnabled(true);
                        Log.d(TAG,"resend1");
    
                }
            },10000);// set time as per your requirement 
            }
        });