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

我对 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 毫秒,或者只是在其中添加一些讨厌的硬编码延迟。


有什么建议么?


千万里不及你
浏览 164回答 3
3回答

青春有我

你可以用处理程序来做到这一点。根据您的要求更改 TIME_DELAY。在类级别定义时间延迟(1000 表示 1 秒)。我已经根据您的要求修改了代码。在这里我添加了 2 秒的延迟。你可以随它去。val TIME_DELAY : Int = 2000if (!validTimepattern.matcher(currentTime).matches()){    Handler().postDelayed(object : Runnable{                    override fun run() {         timeEditText.setError(“Not a valid time”);                    }                }, TIME_DELAY )    }

MYYA

您可以使用 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)

郎朗坤

如果你想暂停执行一段时间(例如:毫秒),你可以使用 SystemClock.sleep(3000);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java