如何dynamic添加行到表格布局
我有一些sqllite的数据,每更新一次,我点击保存button,我想显示数据到一个表格布局,为更新的数据添加更多的行。我有一定的代码,但它只显示更新的数据replace之前数据,我想添加更多的行数据更新。 我知道这只是添加一行到表格布局,但我怎么能添加更多的行。
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));
在表格布局中添加行的方式可以将多个TableRow
实例添加到您的tableLayout
对象中
tl.addView(row1); tl.addView(row2);
等等…
这里有一些技巧,我经过了一些试验和错误之后才想出来的,它可以让你保留你的XML风格,避免使用<merge/>
(比如,inflate()需要合并才能连接到root,并返回根节点) 。 不需要运行时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>
使用带有CursorAdapter (或SimpleCursorAdapter )的ListView可能会更好。
这些都是为了显示sqlite数据库中的行而创build的,并允许用最less的编程进行刷新。
编辑 – 这是一个涉及SimpleCursorAdapter和ListView的教程 ,包括示例代码。
你做得对; 每次需要添加一行时,只需新build一个TableRow()等等。然而,从XML扩充新行可能会更容易。
解决方法1.将你的TableLayout tl设置为类成员variables,只调用TableLayout tl=(TableLayout)findViewById(R.id.maintable);
当你开始上课的时候 点击button直接使用tl,例如。 tl.addView(row),不要再调用FindViewById了。 所以下一个新行不会取代以前的新行。
解决scheme2.每次点击button后,将更新的数据保存到数组中,然后通过数组循环重新呈现整个表格布局。
尝试
new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
代替
new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));