如何禁用带有计时器的按钮,并在重新启动时使其保持禁用状态?

时间:2019-02-11 03:47:51

标签: java android android-studio kotlin

所以我的目标是单击一个按钮,将其禁用,然后启动一个计时器,一旦计时器启动,请启用该按钮。简单吧?你会做这样的事情。

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 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:-3)

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