Получение дочерних элементов из LinearLayout - PullRequest
49 голосов
/ 07 июля 2011

Есть ли способ получить дочерний элемент LinearLayout?Мой код возвращает представление (linearlayout), но мне нужно получить доступ к определенным элементам внутри макета.

Есть предложения?

(Да, я знаю, что могу использовать findViewById, но яя создаю макеты / дочерние элементы в Java - не XML.)

Ответы [ 5 ]

79 голосов
/ 07 июля 2011

Вы всегда можете сделать что-то вроде этого:

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
}
19 голосов
/ 07 июля 2011

Я думаю, что это может помочь: findViewWithTag ()

Установите TAG для каждого вида, добавляемого в макет, а затем получите этот вид с помощью тега, как если бы вы использовали идентификатор

4 голосов
/ 08 июля 2011

Я бы избегал статического захвата элемента у потомков представления.Это может работать сейчас, но делает код сложным в обслуживании и подверженным взлому в будущих выпусках.Как указано выше, правильный способ сделать это - установить тег и получить представление по тегу.

3 голосов
/ 18 апреля 2015
LinearLayout layout = (LinearLayout)findViewById([whatever]);
for(int i=0;i<layout.getChildCount();i++)
    {
        Button b =  (Button)layout.getChildAt(i)
    }

Если все они кнопки, в противном случае приведите их к просмотру и проверьте класс

View v =  (View)layout.getChildAt(i);
if (v instanceof Button) {
     Button b = (Button) v;
}
2 голосов
/ 26 марта 2013

Вы можете сделать это так.

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.

        }
    }
}
...