如何将行动态添加到表格布局中
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. 每次单击按钮后,将更新的数据保存到数组中,然后通过数组循环重新渲染整个表格布局。
【讨论】:
以上是关于如何将行动态添加到表格布局中的主要内容,如果未能解决你的问题,请参考以下文章