java - 如何在 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 毫秒,或者只是在那里添加一些讨厌的硬编码延迟。
有什么建议么?
解决方案
您可以通过使用 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)
推荐阅读
- oauth-2.0 - 刷新时返回当前有效的访问令牌而不是新的访问令牌
- python - 如何将值更新为 Python 字典的值和键?
- tensorflow - 在 tf.keras.Model 中自定义拟合时检查一切正常
- swift - 在 UIMapKit 注释单击上隐藏和显示视图
- python - 如何在数据框上获取值
- c++ - 用少于声明的值初始化一个 int 数组,它只会添加 0 作为值吗?
- r - 在 `dplyr` 动词中使用不带引号的字符串:`select` 和 `arrange` 工作方式不同
- python - 无法导入 numpy
- android - 片段转换的 ViewPager 和 RecyclerView 问题
- javascript - HTML2Canvas 5.0 不保存背景图片