Создание строк таблицы программно при определении макета в XML - PullRequest
0 голосов
/ 26 ноября 2011

Я пытаюсь добавить строки в TableLayout, которые я определяю в файле XML. Файл XML содержит строку заголовка таблицы.

Я могу неплохо добавлять новые строки, используя информацию из различных учебных пособий, но код, необходимый для настройки макета для новых строк, является ужасной неразберихой, и кажется, что задница в том, чтобы поддерживать всякий раз, когда макет для строки заголовка, очень неприятен изменения.

Можно ли создать новые строки для TableLayout, все еще определяя структуру строк в XML? Например, определите строку шаблона в XML, получите указатель на нее в коде и затем клонируйте шаблон всякий раз, когда он мне понадобится.

Или верный способ сделать это как-то совершенно по-другому?

1 Ответ

5 голосов
/ 26 ноября 2011

Предложенный подход будет работать нормально, и он более или менее соответствует общему шаблону, используемому при заполнении элементов ListView.

Определить макет, который содержит одну строку. Получите LayoutInflater, используя LayoutInflater.from(myActivity). Используйте этот инфлатер для создания новых строк, используя ваш макет как шаблон. Обычно вам нужно использовать форму с тремя аргументами LayoutInflater#inflate, передавая false для третьего attachToRoot параметра.

Допустим, вы хотели использовать макет шаблона с меткой и кнопкой в ​​каждом элементе. Это может выглядеть примерно так: (Хотя вместо этого вы можете определить строки таблицы.)

Рез / макет / item.xml:

<LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <TextView android:id="@+id/my_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    <Button android:id="@+id/my_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
</LinearLayout>

Затем в точке, где вы надуваетесь:

// Inflate the layout and find the component views to configure
final View item = inflater.inflate(R.layout.item, parentView, false);
final TextView label = (TextView) item.findViewById(R.id.my_label);
final Button button = (Button) item.findViewById(R.id.my_button);

// Configure component views
label.setText(labelText);
button.setText(buttonText);
button.setOnClickListener(buttonClickListener);

// Add to parent
parentView.addView(item);
...