【问题标题】:How do I disable a button with a timer and keep it disabled on restart?如何禁用带有计时器的按钮并在重新启动时保持禁用状态?
【发布时间】:2019-02-11 03:47:51
【问题描述】:

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

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 秒并使其保持禁用状态?

【问题讨论】:

标签: java android android-studio kotlin


【解决方案1】:

您必须在数据存储中持久保存该信息,即使应用程序关闭,该信息也会保留。

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

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

要记住的关键事项:您必须在计时器到时删除持久信息,并且:如果有人同时更改系统时钟,您也会遇到问题。解决这个问题是可能的,但需要更多的努力。

【讨论】:

  • 我尝试过这样做,但没有成功,您可以写一个简单的例子吗?
  • 如果您有“无效代码”,请考虑在您的问题中添加minimal reproducible example
  • 是的,我很抱歉我会,但我几个小时前就废弃了那部分。
  • 如何在共享首选项中添加时间戳?我把它作为一个字符串来做吗?
  • 我很抱歉,但我无法访问 android 设置,我的答案是在“概念”方面。我会一步一步地进行:首先将示例数据写入+读取共享首选项,然后写入时间戳。等等。但可能有关该服务的其他答案已经解决了您的问题。
【解决方案2】:

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

【讨论】:

  • 如果我重新启动应用程序,它会让我再次点击按钮,即使 10 秒还没有过去。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多