如何在安卓系统中创建动态数据表?

11

我查看了一些有关TableLayout和其他类似内容的教程,但所有教程都是以文本视图的静态行数为程序设计基础。我想知道是否可以在Java代码中创建一个简单的数据表格,它具有3列和可变行数,我可以添加/删除其中的项目。

基本上,就像这样:

DATA DATA DATA
row1 data data
row2 data data

并从活动的Java类中的对象数组中填充此表格。稍后,如果我想添加另一个对象,则只需创建另一行。

例如,如果我在Java中有这个:

Class data{
    public data(String d1, String d2, String d3){
     data1=d1;
     data2=d2;
     data3=d3;
}
}

并且在活动类中添加以下内容:

Class activity{
data info[] = {
new data("row1", "row1", "row1"), new data("row2","row2","row2"),
new data("row3","row3","row3")};
}
}

我将使用 for 循环将这些数据添加到活动中的表格中,无论需要多少行才能全部适合。如果我添加一个新的 row4 对象,它将只添加另一行,并以以下方式结束:

row1 row1 row1
row2 row2 row2
row3 row3 row3

希望我没有表达得太含糊了...提前感谢,伙计们! :)


兄弟,你只需要一点数学知识,保持总对象的集合,当它们的数量增加到需要新行时,添加新行。小型数学方法应该足够了。这就是我所做的,但不能分享代码,因为属于别人。每次添加新行时,将表格布局的高度增加到currentHeight * (float)(oldRwos +1)/(float)oldRows。 - Pulkit Sethi
可能是以编程方式创建TableLayout的重复问题。 - cutiko
4个回答

27

我感到非常愚蠢,但是我自己想出了这个解决方案。

我只是在我的 <SrollView> 中创建了一个 <TableView>,并通过一个从 0 到 myArray.Length() 的 for 循环动态地向其中添加行。

完成:

 TableLayout prices = (TableLayout)findViewById(R.id.prices);
    prices.setStretchAllColumns(true);
    prices.bringToFront();
    for(int i = 0; i < drug.length; i++){
        TableRow tr =  new TableRow(this);
        TextView c1 = new TextView(this);
        c1.setText(drug[i].getName());
        TextView c2 = new TextView(this);
        c2.setText(String.valueOf(drug[i].getPrice()));
        TextView c3 = new TextView(this);
        c3.setText(String.valueOf(drug[i].getAmount()));
        tr.addView(c1);
        tr.addView(c2);
        tr.addView(c3);
        prices.addView(tr);
    }

这是一个类似于毒品战争的游戏...试图在游戏开发领域中小心尝试。

但是...它起到了作用,并且完全按照我的意愿操作。现在我可以将它包装成一个单独的方法,并在需要时进行更新。如果我想添加一行,我只需添加一个数组条目即可。

我觉得我应该回答自己的问题...哈哈!


4
如果您想要像使用ListView或RecyclerView一样完全动态的表格,则可以在GitHub上找到tableView。GitHub
您的代码将如下所示:
String[][] myData = new String[][] { {"row1", "row1", "row1"},
                                     {"row2", "row2", "row2"},
                                     {"row3", "row3", "row3"} };

TableDataAdapter<String[]> myDataAdapter = 
        new SimpleTableDataAdapter(getContext(), myData);
TableHeaderAdapter myHeaderAdapter = 
        new SimpleTableHeaderAdapter(getContext(), "Header1", "Header2", "Header3");

TableView<String[]> table = findViewById(R.id.table);
table.setDataAdapter(myDataAdapter);
table.setHeaderAdapter(myHeaderAdapter);

由于数据是在一个模型中进行管理,因此您可以非常轻松地更新表格。
myDataAdapter.getData().add(new String[]{"row4", "row4", "row4"});
myDataAdapter.getData().add(new String[]{"row5", "row5", "row5"});
myDataAdapter.notifyDatasetChanged();

由于表格提供了许多自定义和样式化的可能性,结果可能看起来像这样:(或完全不同)

在此输入图片描述

最好的问候:)


这对我也不起作用,也没有产生任何错误。但是,它只显示了3个标题。有什么想法吗? - Marci
请确保使用高度为“match_parent”(或任何其他但不是“wrap_content”)的属性。 - Ingo Schwarz

0

你也可以使用RecyclerView来创建它。我认为渲染速度会更快。你只需要使用GridLayoutManager,每行的网格单元数就是你的列数。标题行可以实现为不同的ViewHolder,使用不同的UI,而其余数据则只需放在一个一维数组中即可。


0

您可以通过Java编程创建任何视图,例如:

TextView tv = new TextView(context);

因此,您可以为表格及其行和列执行此操作。

创建完成后,您必须将其添加到布局中,找到根XML元素,然后将其添加到其中:

Viewgroup root = findeViewById(R.id.root);

root.addViews(programaticView);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接