web-dev-qa-db-fra.com

Obtention d'éléments enfants à partir de LinearLayout

Existe-t-il un moyen d'obtenir un élément enfant d'un LinearLayout? Mon code renvoie une vue (linéaire), 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 présentations/enfants en Java - pas XML.)

51
Cody

Vous pouvez 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
}
80
Aleks G

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 ID

19
Asahi

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

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

S'ils sont tous des boutons, sinon cast pour afficher et vérifier la classe

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

Vous pouvez 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.

        }
    }
}
2
Ali