我有一组UI元素 - TextView,EditText,甚至自定义视图都包含setError(CharSequence错误)方法。我正在编写一个简单的实用程序类,可以帮助我调用setError(null),因此它可以一次性设置它们。为此,我编写了一个实用程序类ValidationUtils,可以初始化为...
ValidationUtils validator = ValidationUtils.getInstance();
validator.put(etEmail);
validator.put(etPassword);
一般来说,验证器的put会占用View对象。 Android View类似乎没有setError(CharSequence错误),但是各个UI类(例如EditText)都有。我想将所有条目存储在一个Map中,然后调用validator.clearAll
迭代这个映射并调用每个类中的setError来设置null。我写了一个像:
public interface Validatable {
void setError(CharSequence errorMsg);
}
但是我不知道如何继续通过put()强制转换为此接口,以便稍后调用setError。
现在调用看跌期权给我java.lang.ClassCastException: android.support.v7.widget.AppCompatEditText cannot be cast to Validatable
答案 0 :(得分:1)
您无法做到这一点,因为您无法让基础View
类实现您的界面。但是,您可以做的是让您的自定义View
类实现该接口,然后执行以下操作:
if (view instanceof Validatable) {
Validatable.class.cast(view).setError(null);
} else if (view instanceof TextView) {
TextView.class.cast(view).setError(null);
}
EditText
扩展TextView
,因此应涵盖框架类的两种情况。