我动态创建了布局。它有一些edittexts,textview,spinners等。
在此之后,我必须得到我在这些观点上介绍的信息。
所以我正在做这样的事情
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
}
此处的问题是,当v
为TextView
或View
时,Android会将TextView
始终视为Edittext
(我对旋转器没有任何问题或按钮)。
我该如何解决这个问题?
答案 0 :(得分:6)
那是因为EditText
扩展了TextView
。
切换检查顺序:
if (v instanceof EditText) {
//do something
} else if (v instanceof TextView) {
//do OTHER thing
}
答案 1 :(得分:3)
切换if
语句的顺序。将if (v instanceof EditText)
放在顶部,以便先检查一个。这样做的原因是EditText
直接扩展(如果是间接的话,它会是相同的)TextView
因此当某个内容是EditText
时,它会自动成为TextView
同样,因此instanceof
也会返回true。
答案 2 :(得分:3)
要检查特定课程,请使用
if (v.getClass().equals(TextView.class)) {
/* ... */
} else if (v.getClass().equals(Spinner.class)) {
/* ... */
}
正如Vucko和Ognian所说,EditText
延长了TextView
,这就是为什么instanceof
没有按照您的预期行事的原因。