安卓将instanceof EditText和instanceof TextView识别为同一种类型。

4

我已经动态创建了一个布局,它包含一些EditText、TextView、Spinner等。

接下来,我需要获取我在这些视图中输入的信息。

因此,我正在进行以下操作:

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
            }

问题在于当一个视图是TextView或EditText时,Android总是将v检测为TextView(对于Spinner或Button我没有问题)。
如何解决这个问题?
3个回答

7

这是因为EditText继承自TextView

交换检查顺序:

if (v instanceof EditText) {
     //do something
} else if (v instanceof TextView) {
     //do OTHER thing
}

1
27 秒太晚了 :D 你应得的,兄弟 :D +1 - Vucko

3

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 表现不如你所期望的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接