2011-07-07 22 views
36

Czy istnieje sposób na uzyskanie elementu potomnego LinearLayout? Mój kod zwraca widok (linearlayout), ale muszę uzyskać dostęp do określonych elementów wewnątrz układu.Uzyskiwanie elementów potomnych z LinearLayout

Wszelkie sugestie?

(Tak, wiem, że mogę użyć findViewById, ale tworzę układy/dzieci w Javie - nie XML.)

Odpowiedz

66

Zawsze można zrobić coś takiego:

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

Dzięki. Działanie było następujące: 'TextView tv = (TextView) ((LinearLayout) v) .getChildAt (0);' – Cody

16

myślę to może pomóc: findViewWithTag()

Set TAG do każdego widoku można dodać do układu, a następnie dostać tego poglądu przez TAG jak byś zrobił, używając identyfikatora

3

bym avoi d statycznie chwytając element z dzieci widoku. To może teraz działać, ale sprawia, że ​​kod jest trudny do utrzymania i podatny na łamanie przyszłych wersji. Jak wspomniano powyżej, właściwym sposobem na to jest ustawienie znacznika i uzyskanie widoku przez znacznik.

1

Możesz zrobić tak.

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

Jeśli są wszystkie przyciski, poza cast aby zobaczyć i sprawdzić klasie

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