我是开发者Android 3.1及以上版本的应用程序。
我是开发人员的动态表单生成器,我需要以编程方式添加许多复选框。
表单将是第一列中带有问题的表,其他列将具有复选框。
这是一段代码,我添加了复选框:
int optionsTotalNum = this.calculateColumsForBlock(block);
QuestionsGroup qGroup = block.getQuestionsGroup();
for(int z = 0; z < qGroup.getQuestions().size(); z++)
{
tableRow = new TableRow(this);
Question q = qGroup.getQuestions().get(new Integer(z));
params = new LayoutParams(this.optionWidth, this.rowHeight);
params.column = 0;
TextView optionName = new TextView(this);
optionName.setText(q.getQuestionText().toUpperCase());
optionName.setGravity(Gravity.CENTER);
optionName.setLayoutParams(params);
tableRow.addView(optionName);
for (int index = 1; i < optionsTotalNum; i++)
{
params.column = index;
CheckBox check = new CheckBox(this);
int id = ((z + 1) * 100) + index;
check.setId(id);
check.setLayoutParams(params);
tableRow.addView(check);
}
table.addView(tableRow, new TableLayout.LayoutParams(
LayoutParams.FILL_PARENT,
this.rowHeight));
}
我使用int id = ((z + 1) * 100) + index;
动态创建ID,但我不确定是否会重复和ID。换句话说,我不确定我是否会有两个具有相同ID的视图。我知道所有复选框都有不同的ID,但我会TextViews
,TableLayout
和TableRows
,我不知道他们是否有可用的ID CheckBox
。
如果有两个具有相同ID的视图,findViewById()
会发生什么?
我们可以在同一个ContentView上拥有两个或多个具有相同ID的视图吗?
有没有更好的方法来唯一识别所有复选框?
答案 0 :(得分:1)
好吧,因为你是在运行时添加它..你不必设置一个id ..你可以把它们全部保存在一些Collection中,它维护插入顺序并直接访问它们...... 如果你想继续相同的想法..那么不要在这里做任何复杂的东西..只需在类级别保持静态计数器 ..将其设置为id然后递增它... < / p>
答案 1 :(得分:0)
如果您想拥有独特的ID,只需使用即可 int id =(int)java.util.Date()。getTime() 此函数将以毫秒为单位返回当前日期和时间,并且始终是唯一的。 将此id保存在数组(或其他容器)中以供进一步参考。