我有一组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,因此应该涵盖框架类的两种情况。

10-07 12:15
查看更多