Abrufen von untergeordneten Elementen aus LinearLayout

Lesezeit: 2 Minuten

Gibt es eine Möglichkeit, ein untergeordnetes Element eines LinearLayout zu erhalten? Mein Code gibt eine Ansicht (linearlayout) zurück, aber ich muss Zugriff auf bestimmte Elemente innerhalb des Layouts erhalten.

Irgendwelche Vorschläge?

(Ja, ich weiß, dass ich findViewById verwenden könnte, aber ich erstelle die Layouts/Kinder in Java – nicht in XML.)

Sie können immer so etwas tun:

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
}

  • Vielen Dank. Was funktionierte war: TextView tv = (TextView)((LinearLayout )v).getChildAt(0);

    – Codi

    7. Juli 2011 um 19:29 Uhr

Benutzer-Avatar
Asahi

Ich denke das könnte helfen: findViewWithTag()

Legen Sie TAG für jede Ansicht fest, die Sie dem Layout hinzufügen, und rufen Sie diese Ansicht dann anhand des TAG ab, wie Sie es mit der ID tun würden

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

Wenn es sich bei allen um Schaltflächen handelt, werfen Sie sie andernfalls auf Ansicht und prüfen Sie die Klasse

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

Ich würde es vermeiden, ein Element statisch von den Kindern der Ansicht zu greifen. Es könnte jetzt funktionieren, macht den Code jedoch schwierig zu warten und anfällig für Fehler in zukünftigen Versionen. Wie oben erwähnt, besteht die richtige Methode darin, das Tag zu setzen und die Ansicht über das Tag abzurufen.

Sie können so vorgehen.

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.

        }
    }
}

Benutzer-Avatar
Shalu TD

Die Lösung im Kotlin Version wird sein:

val layout: LinearLayout = setupLayout()
        val count = layout.childCount
        var v: View? = null
        for (i in 0 until count) {
            v = layout.getChildAt(i)
            //do something with your child element
        }

Benutzer-Avatar
Anubhav

Eine der sehr direkten Möglichkeiten besteht darin, mit ihren IDs auf die untergeordneten Ansichten zuzugreifen.

view.findViewById(R.id.ID_OF_THE_CHILD_VIEW)

Diese Ansicht ist die übergeordnete Ansicht.

Ihre untergeordnete Ansicht ist beispielsweise eine Bildansicht mit der ID img_profile. Sie können Folgendes tun:

ImageView imgProfile = view.findViewById(R.id.img_profile)

1146090cookie-checkAbrufen von untergeordneten Elementen aus LinearLayout

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy