我已经浏览了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
我希望我没有太模糊......提前谢谢,伙计们! :)
答案 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)
如果您希望ListView
或RecyclerView
使用完全动态的表格,则会在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();
由于该表提供了大量自定义和样式可能性,结果可能如下所示:(或完全不同)
最好的问候:)
答案 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);