gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:30:42 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com