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



我对EditText元素有一些直接的正则验证。我遇到的问题是,该错误是否会失败验证(即使用户仍在键入(,这不是不错的UX。这是当前的代码。

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 Element,然后才能运行上述验证。另外,我们可以在运行验证之前的最后一个输入以来,我们可以等待x毫秒,或者在其中添加一些令人讨厌的硬编码延迟。

有什么建议?

您可以使用处理程序进行操作。根据您的要求更改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 )
    }

您可以使用handler.postdelayed方法

实现此目标
 private Handler handler = new Handler()
    private Runnable runnable  = new Runnable() {
      public void run() 
        { 
           timeEditText.setError("Not a valid time");
        } 
    }

和内部创建在文本观察者下方创建并附加以编辑文本

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)

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

最新更新