Как динамически добавлять строки в макет таблицы
У меня есть определенные данные в 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));
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