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

Posted

技术标签:

【中文标题】如何将行动态添加到表格布局中【英文标题】:How to add rows dynamically into table layout 【发布时间】:2011-07-08 05:24:05 【问题描述】:

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

【问题讨论】:

【参考方案1】:

这是我经过一番反复试验后发现的技术,它允许您保留 XML 样式并避免使用 <merge/> 的问题(即 inflate() 需要合并以附加到根,并返回根节点)。不需要运行时 new TableRow()s 或 new TextView()s。

代码

注意:这里 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>

【讨论】:

我的表中有 3 列,我的疑问是如何使用这种方法拉伸第二列? 非常好。与其他类型的孩子一起轻松移植到其他类型的布局。 我不明白这部分..ResourceBalance b : xmlDoc.balance_info @learner 可以删除“ResourceBalance b : xmlDoc.balance_info”。我假设这是 jarrod 的代码特有的,因为它在查找时没有解析到任何现有的类。我删除了它,没有它,我的代码按预期工作。 @JarrodSmith 感谢您提供如此完美的答案和很好的解释。【参考方案2】:

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

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

等等……

【讨论】:

【参考方案3】:

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

这些用于显示来自 sqlite 数据库的行,并允许您通过最少的编程进行刷新。

编辑 - 这是一个涉及 SimpleCursorAdapter 和 ListView 的 tutorial,包括示例代码。

【讨论】:

实际上问题是每当我使用列表视图时,它需要字符串数组来显示列表中的数据,但每次单击按钮时数据都会更新,因此它不是字符串数组. :( 您不需要字符串数组。当你使用 CursorAdapter 时,你给它一个数据库游标,这正是你所拥有的。【参考方案4】:

你做得对;每次您需要添加一行时,只需添加新的TableRow() 等。不过,您可能更容易从XML 中添加inflate 的新行。

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于如何将行动态添加到表格布局中的主要内容,如果未能解决你的问题,请参考以下文章

您如何在 Google 表格中进行动态/依赖下拉菜单?

如何在LibGDX中的表格布局中添加动画?

如何识别线性布局中一系列表格单元格的视图ID

如何在表格布局中添加滚动视图?

如何在我的 textview 单元格底部添加 1dp 行(不是表格布局)

Android 表格布局