2011-07-07 122 views
36

有沒有辦法獲得LinearLayout的子元素?我的代碼返回一個視圖(linearlayout),但我需要訪問佈局內的特定元素。從LinearLayout獲取子元素

有什麼建議嗎?

(是的,我知道我可以使用findViewById,但我創建佈局/兒童爪哇 - 不是XML)。

回答

66

你總是可以做這樣的事情:

LinearLayout layout = setupLayout(); 
int count = layout.getChildCount(); 
View v = null; 
for(int i=0; i<count; i++) { 
    v = layout.getChildAt(i); 
    //do something with your child element 
} 
+10

感謝。有效的是:'TextView tv =(TextView)((LinearLayout)v).getChildAt(0);' – Cody

16

我想這可能幫助:findViewWithTag()

設置TAG每一個視圖中,你通過標籤添加到佈局,然後獲取查看你會做使用ID

3

我會avoi d靜態地從視圖的孩子中抓取元素。它現在可能會工作,但會使代碼難以維護,並且容易受到未來版本的影響。如上所述,正確的方法是設置標籤並通過標籤獲取視圖。

1

你可以這樣做。

ViewGroup layoutCont= (ViewGroup) findViewById(R.id.linearLayout); 
getAllChildElements(layoutCont); 
public static final void getAllChildElements(ViewGroup layoutCont) { 
    if (layoutCont == null) return; 

    final int mCount = layoutCont.getChildCount(); 

    // Loop through all of the children. 
    for (int i = 0; i < mCount; ++i) { 
     final View mChild = layoutCont.getChildAt(i); 

     if (mChild instanceof ViewGroup) { 
      // Recursively attempt another ViewGroup. 
      setAppFont((ViewGroup) mChild, mFont); 
     } else { 
      // Set the font if it is a TextView. 

     } 
    } 
} 
1
LinearLayout layout = (LinearLayout)findViewById([whatever]); 
for(int i=0;i<layout.getChildCount();i++) 
    { 
     Button b = (Button)layout.getChildAt(i) 
    } 

如果他們所有的按鈕,否則投來查看和檢查類

View v = (View)layout.getChildAt(i); 
if (v instanceof Button) { 
    Button b = (Button) v; 
}