Динамическое обновление некоторых строк в TableLayout - PullRequest
1 голос
/ 13 декабря 2011

Я добавляю строки к своему TableLayout динамически, и каждая строка содержит более одного TextView.

Я хочу выполнить цикл для каждой строки в моем TableLayout, и я хочу обновить некоторые строки (не каждую строку), например, текст TextView в моих строках. Как я могу справиться с этим?

Ответы [ 2 ]

7 голосов
/ 13 декабря 2011

Переберите дочерние элементы TableLayout, они должны быть TableRows (или другой макет) - пропустите те, которые вы не хотите обновлять.Прокрутите или найдите ViewViewById дочерние элементы TableRow (или чего-либо еще), которые будут вашими TextViews

Когда вы добавляете TextView / CheckBox к TableRow, вы можете установить идентификатор представления с помощью setId (R.id.id_of_the_view)(который вы, возможно, захотите добавить в файл res / values ​​/ ids.xml).

Затем выполните цикл следующим образом:

TableLayout tableLayout = null;
for(int n = 0, s = tableLayout.getChildCount(); n < s; ++n) {
    TableRow row = (TableRow)tableLayout.getChildAt(n);
    TextView name = (TextView)row.findViewById(R.id.tv_name);
}

, так как вы используете row.findViewById, выВы ищете конкретный идентификатор в определенной строке.

2 голосов
/ 11 мая 2015

Я рекомендую использовать метод setTag для быстрого доступа к определенным строкам и представлениям внутри строк.

Например, допустим, у вас есть CheckBox в определенном столбце, который представляет «isSomethingEnabled». При создании CheckBox, сделайте setTag ("foo").

Также используйте setTag для строки, например setTag ("rowKey")

Чтобы быстро добраться до определенного ряда

TableRow tRow = (TableRow) tLayout.findViewWithTag ("rowKey");

И чтобы быстро добраться до конкретного ребенка

View v = tRow.findViewWithTag ("foo");

...