首页 > 解决方案 > 如何在 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 元素移开后再运行上述验证。或者,我们可以在运行验证之前等待自上次输入以来的 X 毫秒,或者只是在那里添加一些讨厌的硬编码延迟。

有什么建议么?

标签: javaandroiderror-handlingandroid-edittext

解决方案


您可以通过使用 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 中添加以下行以避免在 activty 被破坏时崩溃

 handler.removeCallbacks(runnable)

推荐阅读