Подтвердить что ты не робот

Как динамически добавлять строки в таблицу

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

TableLayout tl=(TableLayout)findViewById(R.id.maintable);    
TableRow tr1 = new TableRow(this);
tr1.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
TextView textview = new TextView(this);
textview.setText(data);
//textview.getTextColors(R.color.)
textview.setTextColor(Color.YELLOW);
tr1.addView(textview);
tl.addView(tr1, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
4b9b3361

Ответ 1

Как вы добавили строку в макет таблицы, вы можете добавить несколько экземпляров TableRow в свой tableLayout объект

tl.addView(row1);
tl.addView(row2);

и т.д...

Ответ 2

Здесь метод, который я выяснил после нескольких проб и ошибок, которые позволяют сохранить ваши стили XML и избежать проблем с использованием <merge/> (например, inflate() требует слияния для присоединения к корню и возвращает корень node). Не требуется время выполнения new TableRow() или new TextView().

код

TableLayout table = (TableLayout)CheckBalanceActivity.this.findViewById(R.id.attrib_table);
for(ResourceBalance b : xmlDoc.balance_info)
{
    // Inflate your row "template" and fill out the fields.
    TableRow row = (TableRow)LayoutInflater.from(CheckBalanceActivity.this).inflate(R.layout.attrib_row, null);
    ((TextView)row.findViewById(R.id.attrib_name)).setText(b.NAME);
    ((TextView)row.findViewById(R.id.attrib_value)).setText(b.VALUE);
    table.addView(row);
}
table.requestLayout();     // Not sure if this is needed.

attrib_row.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow style="@style/PlanAttribute"  xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        style="@style/PlanAttributeText"
        android:id="@+id/attrib_name"
        android:textStyle="bold"/>
    <TextView
        style="@style/PlanAttributeText"
        android:id="@+id/attrib_value"
        android:gravity="right"
        android:textStyle="normal"/>
</TableRow>

Ответ 3

Вам может быть полезно использовать ListView с CursorAdapter (или SimpleCursorAdapter).

Они созданы для отображения строк из базы данных sqlite и позволяют обновлять с минимальным программированием с вашей стороны.

Изменить - это учебник, включающий SimpleCursorAdapter и ListView, включая пример кода.

Ответ 4

Вы делаете это правильно; каждый раз, когда вам нужно добавить строку, просто так новый TableRow() и т.д. Возможно, вам будет легче раздувать новую строку из XML.

Ответ 5

Решение 1. Задайте свой TableLayout tl как переменную-член класса, вызовите только TableLayout tl=(TableLayout)findViewById(R.id.maintable); при запуске класса. Когда кнопка нажата, используйте tl напрямую, например. tl.addView(строка), больше не вызывайте FindViewById. Итак, следующая новая строка не заменит предыдущую новую строку.

Решение 2. Каждый раз после нажатия кнопки сохраняйте обновленные данные в массиве, а затем повторно отрисовывайте весь массив таблиц по циклу через массив.

Ответ 6

Попробуйте
new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

вместо

new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));