web-dev-qa-db-fra.com

Obtenez toutes les vues enfants à l'intérieur de LinearLayout à la fois

J'ai un LinearLayout, qui contient plusieurs enfants TextViews. Comment obtenir une vue enfant de ce LinerLayout à l'aide d'une boucle?

126
Adham

Utilisez getChildCount() et getChildAt(int index).

Exemple:

LinearLayout ll = …
final int childCount = ll.getChildCount();
for (int i = 0; i < childCount; i++) {
      View v = ll.getChildAt(i);
      // Do something with v.
      // …
}
263
Yashwanth Kumar
   ( (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.

Ici, je ne fais que rééditer EdiTexts, si vous voulez toutes les vues, vous pouvez remplacer EditText par View.

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

}
37
Favas Kv

utilisez ceci

    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

Obtenez tous les points de vue d'un point de vue plus ses enfants récursivement dans 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)
}
0
Stanislav Kinzl

C'est plus facile avec Kotlin:

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

Ici ll est id de LinearLayout défini en XML.

0
Malwinder Singh