Holen Sie sich alle untergeordneten Ansichten in LinearLayout auf einmal


140

Ich habe eine LinearLayout, die mehrere Kinder enthält TextViews. Wie kann ich mithilfe einer Schleife untergeordnete Ansichten dieses LinerLayout abrufen?

Antworten:


282

Verwenden Sie getChildCount()und getChildAt(int index).

Beispiel:

LinearLayout ll = 
final int childCount = ll.getChildCount();
for (int i = 0; i < childCount; i++) {
      View v = ll.getChildAt(i);
      // Do something with v.
      // …
}

Hallo Yashwanth Kumar, kann ich alle Textansichten in diesem linearen Layout erhalten?
Hai Nguyen

15
@ hai-nguyen: Sie können if (v Instanz von TextView) {...} dafür verwenden.
Anoop

3
Was ist, wenn eines der Kinder eine ViewGroup ist und wir auch all diese Kinder haben möchten?
Hendra Anggrian

Wie kann ich die Gesamtzahl der buttonsim linearen Layout hinzugefügten Elemente durch 2 aufteilen lassen ? Mein Zweck ist es, 2 Reihen von Schaltflächen mit linearem Layout anzuzeigen .
Jay Rathod RJ

39
((ViewGroup) findViewById(android.R.id.content));// you can use this in an Activity to get your layout root view, then pass it to findAllEdittexts() method below.

Hier iteriere ich nur EdiTexts. Wenn Sie alle Ansichten möchten, können Sie EditText durch Ansicht ersetzen.

SparseArray<EditText> array = new SparseArray<EditText>();

private void findAllEdittexts(ViewGroup viewGroup) {

    int count = viewGroup.getChildCount();
    for (int i = 0; i < count; i++) {
        View view = viewGroup.getChildAt(i);
        if (view instanceof ViewGroup)
            findAllEdittexts((ViewGroup) view);
        else if (view instanceof EditText) {
            EditText edittext = (EditText) view;
            array.put(editText.getId(), editText);
        }
    }
}

Nur um zu verdeutlichen, ist es rekursiv, weil getChildAtnur direkte Kinder zurückgegeben werden
YoussefDir

4

benutze das

    final int childCount = mainL.getChildCount();
    for (int i = 0; i < childCount; i++) {
          View element = mainL.getChildAt(i);

        // EditText
        if (element instanceof EditText) {
            EditText editText = (EditText)element;
            System.out.println("ELEMENTS EditText getId=>"+editText.getId()+ " getTag=>"+element.getTag()+
            " getText=>"+editText.getText());
        }

        // CheckBox
        if (element instanceof CheckBox) {
            CheckBox checkBox = (CheckBox)element;
            System.out.println("ELEMENTS CheckBox getId=>"+checkBox.getId()+ " getTag=>"+checkBox.getTag()+
            " getText=>"+checkBox.getText()+" isChecked=>"+checkBox.isChecked());
        }

        // DatePicker
        if (element instanceof DatePicker) {
            DatePicker datePicker = (DatePicker)element;
            System.out.println("ELEMENTS DatePicker getId=>"+datePicker.getId()+ " getTag=>"+datePicker.getTag()+
            " getDayOfMonth=>"+datePicker.getDayOfMonth());
        }

        // Spinner
        if (element instanceof Spinner) {
            Spinner spinner = (Spinner)element;
            System.out.println("ELEMENTS Spinner getId=>"+spinner.getId()+ " getTag=>"+spinner.getTag()+
            " getSelectedItemId=>"+spinner.getSelectedItemId()+
            " getSelectedItemPosition=>"+spinner.getSelectedItemPosition()+
            " getTag(key)=>"+spinner.getTag(spinner.getSelectedItemPosition()));
        }

    }

3

Mit Kotlin ist es einfacher, eine For-In-Schleife zu verwenden:

for (childView in ll.children) {
     //childView is a child of ll         
}

Hier llist iddie LinearLayoutin Layout XML definiert.


1

Holen Sie sich alle Ansichten aus jeder Art von Layout

public List<View> getAllViews(ViewGroup layout){
        List<View> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            views.add(layout.getChildAt(i));
        }
        return views;
}

Holen Sie sich alle TextView aus jeder Art von Layout

public List<TextView> getAllTextViews(ViewGroup layout){
        List<TextView> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            View v =layout.getChildAt(i);
            if(v instanceof TextView){
                views.add((TextView)v);
            }
        }
        return views;
}

-1

Holen Sie sich alle Ansichten einer Ansicht und ihrer Kinder rekursiv in Kotlin:

private fun View.getAllViews(): List<View> {
    if (this !is ViewGroup || childCount == 0) return listOf(this)

    return children
            .toList()
            .flatMap { it.getAllViews() }
            .plus(this as View)
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.