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);
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
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.
}
}
}
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
}
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: