我有一组UI元素-TextView,EditText甚至自定义视图,它们都具有setError(CharSequence error)方法。我正在编写一个简单的实用程序类,它可以帮助我调用setError(null),以便一次性完成所有设置。为此,我编写了一个实用程序类ValidationUtils,可以将其初始化为...
ValidationUtils validator = ValidationUtils.getInstance();
validator.put(etEmail);
validator.put(etPassword);
通常,验证器的放置会包含一个View对象。 Android View类似乎没有setError(CharSequence错误),但各个UI类(如EditText)却有。我想将所有放置在Map中的条目存储起来,然后调用
validator.clearAll
遍历此Map,并在每个类中调用setError来设置null。我写了一个像这样的界面:public interface Validatable {
void setError(CharSequence errorMsg);
}
但是无法完全弄清楚如何将通过put()添加的元素强制转换为该接口,以便以后可以调用setError。
现在,调用看跌期权给了我
java.lang.ClassCastException: android.support.v7.widget.AppCompatEditText cannot be cast to Validatable
最佳答案
您将无法执行此操作,因为无法让基本的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
,因此应该涵盖框架类的两种情况。