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



У меня есть определенные данные в 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));
327   6  

6 ответов:

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

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

etc...

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

код

Примечание: Здесь CheckBalanceActivity это какой-то образец Activity класс

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>

возможно, вам лучше использовать ListView С CursorAdapter (или SimpleCursorAdapter).

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

Edit - вот учебник с участием SimpleCursorAdapter и ListView, включая пример кода.

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

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

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

попробовать
new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

вместо

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

Comments

    Ничего не найдено.