2016-08-20 73 views
0

返回的子元素通過其類類型我有question.xml:android系統

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:layout_marginBottom="10dp" 
     android:textColor="#239" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:layout_gravity="center_horizontal" /> 
    <RadioGroup 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"></RadioGroup> 
</LinearLayout> 

和一個函數返回給定的parentId的第一個孩子的看法:

public View findViewByType(int parentId, Class<?> type){ 
    LinearLayout rootLinearLayout = (LinearLayout) findViewById(parentId); 
    int count = rootLinearLayout.getChildCount(); 
    for (int i = 0; i < count; i++) { 
     View v = rootLinearLayout.getChildAt(i); 
     //Toast.makeText(getApplicationContext(), v.getClass().getName(),Toast.LENGTH_LONG).show(); 
     if (v.getClass() == type) return v; 
    } 
    return null; 
} 

我充氣使用question.xml佈局像一個視圖,然後試圖從它那裏得到的RadioGroup中:

 LinearLayout q = (LinearLayout)getLayoutInflater().inflate(R.layout.question, null); 
     RadioGroup rg = (RadioGroup) findViewByType(q.getId(), RadioGroup.class); 

rgnull

當我測試它喜歡:

q.getChildAt(0).getClass().GetName(); //return TextView = Correct 
q.getChildAt(1).getClass().GetName(); //returns RadioGroup = Correct 

但在功能findViewByType循環,對於訴值:

I = 1是TextView這是正確的

I = 2是LinearLayout這就是INCORRECT

我在做什麼錯?

順便說一下,我試圖在調用函數之前設置Id爲虛擬的LinearLayout,但結果是相同的。

回答

1

uhmm .. LinearLayout是封閉類的RadioGroup我會說去爲這個而

v.getClass().isAssignableFrom(type) && (type.isInstance(v))//did it work? 

也許這相當?

(v.getClass() == type) || (v.getClass().isAssignableFrom(type) && 
          v.getClass().equals(type.getEnclosingClass()))