2016-11-04 128 views
3

我已經動態地創建了Layout。它有一些edittexts,textview,spinners等。Android檢測到instanceof EditText和instanceof TextView是一樣的

之後,我必須得到我介紹的這些意見的信息。

所以Im做這樣的事情

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 
      } 

這裏的問題是,Android的檢測v總是像TextViewView或者是TextViewEdittext(我有微調或按鈕沒問題)。

我該如何解決這個問題?

回答

5

這是因爲EditText延伸TextView

開關檢查的順序:

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

它的工作原理。之前沒有看到該選項。謝謝。 –

+1

27秒太晚了:D你配得上它:D +1 – Vucko

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不行爲。