11

我已经查看了 TableLayouts 和其他类似内容的教程,但所有这些似乎都被编程为带有 textview 的静态行数。我想知道是否可以创建一个简单的数据表,其中包含 3 列和一组可变的行,我可以在 Java 代码中添加/删除项目。

基本上,有这样的东西:

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

我希望我没有太含糊......提前谢谢,伙计们!:)

4

4 回答 4

27

我觉得很愚蠢,但我自己想通了。

我只是在<TableView>我的内部创建了一个<SrollView>,并通过从 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);
    }

这是一款毒品战争风格的游戏...尝试在游戏开发领域从小处着手。

但是......她工作,并且完全按照我的意愿去做。现在我可以将它包装到一个单独的方法中,并随时更新它。如果我想添加一行,我只需添加一个数组条目。

想我会回答我自己的问题...大声笑!

于 2013-08-05T03:47:43.643 回答
3

如果你想要一个完全动态的表格,就像你习惯的那样,ListView或者在GitHub 上RecyclerView有表格视图。

您的代码将如下所示:

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();

由于该表提供了许多自定义和样式可能性,结果可能如下所示:(或完全不同)

在此处输入图像描述

此致 :)

于 2017-11-26T10:20:26.007 回答
0

您可以通过 Java 以编程方式创建任何视图,例如:TextView tv = new TextView(context);

因此,您可以对 theTable和它们的行和列执行此操作。

一旦你创建了它,你必须将它添加到你的布局中,你必须找到根 xml 元素,然后添加到它:

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

于 2017-11-26T10:27:04.383 回答
0

您也可以使用RecyclerView. 我认为渲染会快很多。您所要做的就是使用GridLayoutManager. 每行上的网格单元数是您的列数。Header 行可以实现为不同的 ViewHolder,它使用不同的 ui,您对其余数据所做的一切就是将其放入一维数组中。

于 2017-11-01T13:09:11.113 回答