如何在android中创建动态数据表?

时间:2013-08-05 02:15:41

标签: java android xml

我已经浏览了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 个答案:

答案 0 :(得分:21)

我觉得非常愚蠢,但我已经自己想出来了。

我只是在我的内部创建了一个动态添加的行,通过从0到myArray.Length()的for循环。

BAM:

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

这是一场毒战风格的游戏......试着在游戏开发领域开始小规模。

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

想想我会回答我自己的问题......哈哈!

答案 1 :(得分:1)

如果您希望ListViewRecyclerView使用完全动态的表格,则会在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();

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

enter image description here

最好的问候:)

答案 2 :(得分:0)

您也可以使用RecyclerView创建它。我认为渲染会更快。您所要做的就是使用GridLayoutManager。每行上的gridcells数是您的列数。 Header行可以实现为一个不同的ViewHolder,它使用不同的ui,你只需要将其余的数据放在一个单独的数组中。

答案 3 :(得分:0)

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

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

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

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