为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 EditText 字段上显示错误消息之前添加延迟?

如何在 EditText 字段上显示错误消息之前添加延迟?

千万里不及你 2023-05-10 15:13:42
我对 editText 元素进行了一些简单的正则表达式验证。我遇到的问题是,如果验证失败(即使用户仍在输入),错误会立即显示,这不是很好的用户体验。这是当前的代码。TextWatcher tw = new TextWatcher() {    public void afterTextChanged(Editable s) {        String currentTime = t_timeEditText.getText().toString();        if (!validTimepattern.matcher(currentTime).matches()){            timeEditText.setError("Not a valid time");        }    }}我认为最好的解决方案是等到焦点从 editText 元素移开后再运行上述验证。或者,我们可以在运行验证之前等待自上次输入以来的 X 毫秒,或者只是在其中添加一些讨厌的硬编码延迟。有什么建议么?
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

你可以用处理程序来做到这一点。根据您的要求更改 TIME_DELAY。在类级别定义时间延迟(1000 表示 1 秒)。我已经根据您的要求修改了代码。在这里我添加了 2 秒的延迟。你可以随它去。


val TIME_DELAY : Int = 2000

if (!validTimepattern.matcher(currentTime).matches()){


    Handler().postDelayed(object : Runnable{

                    override fun run() {

         timeEditText.setError(“Not a valid time”);

                    }

                }, TIME_DELAY )

    }


查看完整回答
反对 回复 2023-05-10
?
MYYA

TA贡献1868条经验 获得超4个赞

您可以使用 Handler.postDelayed 方法实现此目的


 private Handler handler = new Handler()


    private Runnable runnable  = new Runnable() {

      public void run() 

        { 

           timeEditText.setError("Not a valid time");

        } 


    }

并在 onCreate 内部创建下面的文本观察器并附加以编辑文本


TextWatcher tw = new TextWatcher() {

    public void afterTextChanged(Editable s) {

           timeEditText.setError(null)

         handler.removeCallbacks(runnable)


        if (!validTimepattern.matcher(currentTime).matches()){

             handler.postDelayed(runnable,3000)

        }

    }

}

并在 ondestroy 中添加以下行以避免活动被销毁时崩溃


 handler.removeCallbacks(runnable)


查看完整回答
反对 回复 2023-05-10
?
郎朗坤

TA贡献1921条经验 获得超9个赞

如果你想暂停执行一段时间(例如:毫秒),你可以使用 SystemClock.sleep(3000);



查看完整回答
反对 回复 2023-05-10
  • 3 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信