如何将Android视图转换为具有特定方法的接口?

时间:2017-04-04 03:22:14

标签: java android

我有一组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

1 个答案:

答案 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,因此应涵盖框架类的两种情况。