67 votes

Obtenir des éléments enfants de LinearLayout

Existe-t-il un moyen d'obtenir un élément enfant d'un LinearLayout ? Mon code renvoie une vue (linearlayout), mais j'ai besoin d'accéder à des éléments spécifiques à l'intérieur de la mise en page.

Aucune suggestion?

(Oui, je sais que je pourrais utiliser findViewById, mais je crée les mises en page/enfants en java - pas en XML.)

102voto

Aleks G Points 25412

Tu peux toujours faire quelque chose comme ça :

 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
}

20voto

Asahi Points 5938

Je pense que cela pourrait aider : findViewWithTag()

Définissez TAG sur chaque vue que vous ajoutez à la mise en page, puis obtenez cette vue par le TAG comme vous le feriez avec l'ID

7voto

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

Si ce sont tous des boutons, sinon lancez pour afficher et vérifier la classe

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

5voto

THE_DOM Points 1355

J'éviterais de saisir statiquement un élément des enfants de la vue. Cela peut fonctionner maintenant, mais rend le code difficile à maintenir et susceptible de casser dans les versions futures. Comme indiqué ci-dessus, la bonne façon de procéder consiste à définir la balise et à obtenir la vue par la balise.

1voto

Mubeen1992 Points 425

Tu peux faire comme ça.

 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.

        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X