2011-07-07 35 views
36

Có cách nào để lấy phần tử con của LinearLayout không? Mã của tôi trả về một khung nhìn (linearlayout), nhưng tôi cần truy cập vào các phần tử cụ thể bên trong bố cục.Lấy các phần tử con từ LinearLayout

Mọi đề xuất?

(Vâng, tôi biết tôi có thể sử dụng findViewById, nhưng tôi đang tạo ra các bố trí/trẻ em trong java - không XML.)

Trả lời

66

Bạn luôn có thể làm điều gì đó như thế này:

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

Cảm ơn. Những gì đã làm việc là: 'TextView tv = (TextView) ((LinearLayout) v) .getChildAt (0);' – Cody

16

Tôi nghĩ điều này có thể giúp: findViewWithTag()

Set TAG cho mọi Xem bạn thêm vào cách bố trí và sau đó nhận được rằng Xem theo TAG như bạn sẽ làm gì sử dụng ID

3

tôi sẽ avoi d tĩnh lấy một phần tử từ con của khung nhìn. Nó có thể làm việc bây giờ, nhưng làm cho mã khó khăn để duy trì và dễ bị phá vỡ trên các phiên bản tương lai. Như đã nêu ở trên, cách thích hợp để làm điều đó là đặt thẻ và để có được chế độ xem theo thẻ.

1

Bạn có thể làm như thế này.

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) 
    } 

Nếu họ là tất cả các nút, nếu không đúc để xem và kiểm tra các lớp

View v = (View)layout.getChildAt(i); 
if (v instanceof Button) { 
    Button b = (Button) v; 
} 
Các vấn đề liên quan