【问题标题】:Android detects instanceof EditText and instanceof TextView as the sameAndroid 将 instanceof EditText 和 instanceof TextView 检测为相同
【发布时间】:2016-11-04 15:40:55
【问题描述】:
我已经动态创建了布局。它有一些编辑文本、文本视图、微调器等。
之后,我必须得到我介绍的关于这些观点的信息。
所以我在做这样的事情
for(int i=0;i <= childs;i++){
View v=parent.getChildAt(i);
if (v instanceof TextView) {
//do something
}
else if (v instanceof EditText) {
//do OTHER thing
}
这里的问题是,当View 是TextView 或Edittext(我对微调器或按钮没有问题)时,Android 总是将v 检测为TextView。
我该如何解决这个问题?
【问题讨论】:
标签:
java
android
layout
android-edittext
textview
【解决方案1】:
那是因为 EditText 扩展了 TextView。
切换检查顺序:
if (v instanceof EditText) {
//do something
} else if (v instanceof TextView) {
//do OTHER thing
}
【解决方案2】:
切换if 语句的顺序。将if (v instanceof EditText) 放在顶部,以便它首先检查那个。这样做的原因是EditText 直接扩展(如果它是间接的则相同)TextView,因此当某事物是 EditText 时,它也自动是 TextView,因此是 instanceof那里也返回 true。
【解决方案3】:
要检查特定类,请使用
if (v.getClass().equals(TextView.class)) {
/* ... */
} else if (v.getClass().equals(Spinner.class)) {
/* ... */
}
正如 Vucko 和 Ognian 所说,EditText 扩展了 TextView,这就是为什么您的 instanceof 的行为不符合您的预期。