如何动态地将行添加到表布局中

时间:2011-03-03 17:04:15

标签: android

我在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));

5 个答案:

答案 0 :(得分:90)

这是我在经过一些试验和错误之后想出的技术,它允许您保留XML样式并避免使用<merge/>的问题(即inflate()需要合并附加到root,并返回根节点)。无需运行时new TableRow()new TextView()

<强>代码

注意:此处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>

答案 1 :(得分:23)

您在表格布局中添加行的方式可以将多个TableRow个实例添加到tableLayout对象

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

等...

答案 2 :(得分:3)

您最好使用ListView CursorAdapter(或SimpleCursorAdapter)。

这些内容用于显示sqlite数据库中的行,并允许您使用最少的编程进行刷新。

修改 - 这是一个tutorial,涉及SimpleCursorAdapter和ListView,包括示例代码。

答案 3 :(得分:2)

你做对了;每次您需要添加一行时,只需添加一行TableRow()等等。尽管inflate可能更容易XML新行。

答案 4 :(得分:0)

解决方案1.将TableLayout tl设置为类成员变量,仅在启动类时调用TableLayout tl=(TableLayout)findViewById(R.id.maintable);。单击按钮时直接使用tl,例如。 tl.addView(行),不再调用FindViewById。所以下一个新行不会取代之前的新行。

解决方案2.每次按下按钮后,将更新的数据保存到数组中,然后循环遍历数组,重新渲染整个表格布局。