java - 如何将Android View 转换为具有特定方法的界面?

标签 java android

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

相关文章:

java - 我如何检索用户个人资料名称信息,例如姓名和电子邮件以及个人资料照片?

java - 如何使用 XStream 解码 map

java - java中将对象赋值给变量

Java,对具有不同参数的方法使用@Override时出错?

java - 是否可以在java中为Runnable接口(interface)创建对象

android - 如何使用 Eclipse ADT 向导为 2048 位 key 大小的 android 应用程序签名生成 keystore ?

java - 谷歌分析 - 缺少 OAuth2Native 类

android - 有没有办法获取当前播放歌曲的信息?

android - 以 root 身份运行安全 API 调用,android

android - 我 ADB 1.0.32 在 Windows 10 中不工作