【问题标题】: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
            }

这里的问题是,当ViewTextViewEdittext(我对微调器或按钮没有问题)时,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
    }
    

    【讨论】:

    • 27 秒太晚了 :D 你活该兄弟 :D +1
    【解决方案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 的行为不符合您的预期。

      【讨论】:

        猜你喜欢
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        相关资源
        最近更新 更多