【发布时间】:2013-12-16 11:45:45
【问题描述】:
我在ViewPager 中有一个Fragment。
在那个片段中,我有几个 EditText,它们的 OnTextChanged 侦听器(在 onViewCreated 方法中添加)执行一些验证工作并调用函数来设置/删除错误,例如:
// Sets or removes an error message in the nameField EditText
public void validateUsername(String message)
{
if(message == null)
{
nameField.setError(null);
}
else
{
nameField.setError(message,errorIcon);
}
}
errorIcon 是 Drawable 实例化的 onCreate,如下所示:
errorIcon = getResources().getDrawable(R.drawable.ic_wrong_input);
errorIcon.setBounds(new Rect(0, 0, errorIcon.getIntrinsicWidth(), errorIcon.getIntrinsicHeight()));
当我在 EditText 中键入内容时,验证工作正常:显示我的错误消息,带有我的自定义图标。
但是当我旋转设备时,validateUsername() 函数被调用(预期行为),else 分支中的nameField.setError(message,errorIcon) 被执行,但EditText 得到的是 Android 的默认错误图标而不是我的(是的,调试时我可以看到我的errorIcon Drawable被实例化了)。之后,如果我在那个EditText 中输入了一些无效的东西,验证方法会再次被调用,这一次我会再次得到我的自定义错误图标。如果我再次旋转设备,同样的事情:重新创建时的默认图标,输入无效内容后的自定义图标...
谁能解释这种行为?即使我明确设置了自定义图标,为什么在重新创建后由于设备旋转而出现 Android 的默认错误图标?
编辑:
我尝试在 validateUsername() 方法中实例化 Drawable,但没有成功。
编辑 2:
我想使用自定义错误图标,以便它与我的 UI 更好地融合,还因为我正在使用另一个自定义图标(绿色图标),当他们的输入有效,我希望它们彼此一致。
现在我已经辞职,我让 Android 使用默认的错误图标(即我没有在 setError() 方法上指定任何 Drawable)。当输入有效时,我将 EditText 的右 Drawable 设置为我的自定义“输入有效”图标,为了保持一致性,我将其修改为与 Android 的 indicator_input_error.png 相同的大小。
不过,我不喜欢这种方法(例如,在未来的版本中,indicator_input_error.png 图标可能会有所不同),我不明白为什么在重新创建 Fragment 时我一直得到默认图标.奇怪的是,第一次重新创建 Fragment 时,如果 EditText 验证失败并且 validateUsername() 被非空消息调用,我会得到我的自定义图标。在第二次(等等)Fragment 被重新创建时,我得到了 Android 的默认图标。如果我输入了一些无效的文本,我又得到了我的自定义图标,这很奇怪。
【问题讨论】:
-
您可以尝试的另一件事是在 nameField 上调用
requestFocus -
不,这也不起作用。
标签: java android android-fragments android-edittext