Установка количества столбцов программно в TableLayout - PullRequest
6 голосов
/ 28 апреля 2010

У меня есть макет XML, который содержит TableLayout с неизвестным количеством TableRows ... Количество строк будет установлено во время выполнения, хотя я знаю, что мне нужны две колонки ... У меня есть пара вопросов по этому поводу:

- есть ли способ программно дать идентификатор (во время выполнения) созданным TableRows, которые будут помещены в TableLayout, чтобы я мог ссылаться на них позже из других частей программного обеспечения?

1 Ответ

5 голосов
/ 28 апреля 2010

Вы можете построить строки таблицы с помощью частей XML и LayoutInflater. Скажем, у вас есть это как table_cell.xml:

<TextView android:id="@+id/text"
    android:text="woot" />

И это как ваш table_row.xml (если вы не делаете что-то необычное со своим TableRow, вам может не понадобиться помещать это в свой собственный XML-файл, а вместо этого просто создавать это программно. Результат будет таким же):

<TableRow />

Предполагая, что ваша ссылка TableLayout была названа "table", вы могли бы сделать что-то вроде этого:

TableLayout table = (TableLayout)findViewById(R.id.table);
LayoutInflater inflater = getLayoutInflater();

for(int i = 0; i < 5; i++) {
    TableRow row = (TableRow)inflater.inflate(R.layout.table_row, table, false);
    View v = (View)inflater.inflate(R.layout.table_cell, row, false);
    row.addView(v);
    v = (View)inflater.inflate(R.layout.table_cell, row, false);
    row.addView(v);

    // you can store your reference to `row` here for later use
    table.addView(row);
}

С помощью этого метода вы все равно можете настроить макет в XML, упрощая чтение, организацию и редактирование, и у вас все еще есть программный контроль над количеством столбцов и строк в таблице. Вы также можете хранить ссылки на каждую строку таблицы для дальнейшего использования.

...