Android将Editofxt的实例和TextView的实例检测为相同

时间:2016-11-04 15:40:56

标签: java android layout android-edittext textview

我动态创建了布局。它有一些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
            }

此处的问题是,当vTextViewView时,Android会将TextView始终视为Edittext(我对旋转器没有任何问题或按钮)。

我该如何解决这个问题?

3 个答案:

答案 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没有按照您的预期行事的原因。