我有一组 UI 元素 — TextView、EditText,甚至自定义 View ,其中都有 setError(CharSequence error) 方法。我正在编写一个简单的实用程序类,它可以帮助我调用 setError(null),这样它就能一次性设置所有这些。为此,我编写了一个实用程序类 ValidationUtils,它可以像这样初始化:
ValidationUtils validator = ValidationUtils.getInstance();
validator.put(etEmail);
validator.put(etPassword);
一般来说, validator 的 put 接受一个 View 对象。 Android View 类似乎没有 setError(CharSequence error),但个别 UI 类(例如 EditText)有。我想存储放入 Map 中的所有条目,然后调用 validator.clearAll
来迭代该映射并在每个类中调用 setError 以设置 null。我写了一个这样的界面:
public interface Validatable {
void setError(CharSequence errorMsg);
}
但不太清楚如何继续将通过 put() 添加的元素强制转换到此接口(interface),以便稍后可以调用 setError。
现在调用 put 给我 java.lang.ClassCastException: android.support.v7.widget.AppCompatEditText 无法转换为 Validatable
最佳答案
您将无法执行此操作,因为您无法使基本 View
类实现您的界面。但是,您可以做的是让您的自定义 View
类实现该接口(interface),然后执行以下操作:
if (view instanceof Validatable) {
Validatable.class.cast(view).setError(null);
} else if (view instanceof TextView) {
TextView.class.cast(view).setError(null);
}
EditText
扩展了 TextView
,因此应该涵盖框架类的两种情况。
关于java - 如何将Android View 转换为具有特定方法的界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43197674/