我有一个页面会显示一个星期值的预定游戏的选定运动。所选的运动和周存储在页面开头打开的XML文件中。当我点击下周链接时,新的周日期值将存储到此xml文件中,然后重新加载页面。现在应显示下周的任何游戏。这些游戏显示在tablelayout中,我在.java页面中根据需要以编程方式创建行。 以下是代码的简化示例。
TableLayout tlGames = (TableLayout)findViewById(R.id.table_games);
for (int i = 0; i < gameCount; i++)
{
TableRow trGameHomeTeam = new TableRow(this);
TextView tvHomeTeamName = new TextView(this);
tvHomeTeamName.setText("Home Team Name Here");
tvHomeTeamName.setLayoutParams(new LayoutParam (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
TextView tvHomeTeamScore = new TextView(this);
tvHomeTeamScore.setText("Home Team Score Here");
tvHomeTeamScore.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
trGameHomeTeam.addView(tvHomeTeamName);
trGameHomeTeam.addView(tvHomeTeamScore);
tlGames.addView(trGameHomeTeam,new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
}
当我最初运行我的应用时,正确列出了当前日期的游戏。然后,当我点击下周链接时,它应该重新加载此页面并显示这个新周的游戏。相反,我收到一条错误消息“指定的孩子已经有父。你必须首先在孩子的父母上调用removeView()。”我添加了一个“tlGames.removeAllViews();”紧接在TableLayout tlGames行之后但这没有纠正错误。
我唯一的地方是“addView”用于创建表格行或表格行中的文本视图。
谁能告诉我我做错了什么?
由于
答案 0 :(得分:4)
我的猜测是,通过重新加载页面来显示本周的游戏,您可以使用布局inflater来夸大细节布局吗?
布局inflater是我看到这个错误发生的唯一地方,如果是这种情况,将第三个参数false传递给inflate方法,因为它会尝试给视图的根充气,否则会抛出这个例外还给你。
即
inflater.inflate(R.layout.profile, container, false);
答案 1 :(得分:0)
首先,你必须告诉你哪一行得到了这个错误。或者放入堆栈跟踪。
现在,您收到该错误消息只是因为您已经拥有该视图,并且您将再次在同一视图的位置添加另一个视图。
因此,在添加其他视图之前,首先删除具有特定名称的添加视图。
实施例。 tl.removeView(blablabla); 然后添加视图。
或者
如果你想加载循环条件的特定视图,那么你也可以试试这个。
根据循环条件创建另一个xml。 防爆。比如child.xml
然后根据循环条件将该布局添加到主布局。您还可以使用该循环中的该布局数据进行访问。
看看我已经完成的这个循环。
for (int i = 0; i<=tempEmployerList.size()-1; i++) {
LinearLayout EmpItem = (LinearLayout)LayoutInflater.from (getApplicationContext()).inflate(R.layout.child, null);
// to access with the data use this
((TextView)EmpItem.findViewById(R.id.taxcodeTextView)).setText(TAXCODE);
// Finaly add that loopLayout to your layout to your main layout like this
myLinearLayout.addView(EmpItem);
}
我会对它进行测试,这对你很有帮助。
如果没有,请告知我。
或者
如果您仍想使用自己的代码执行某些操作,请了解this example
它会帮助你。
享受。 :))
答案 2 :(得分:0)
我已经纠正了一些错误。再纠正两个:
tvHomeTeamName.setLayoutParams(new TableRow.LayoutParams (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
...
tvHomeTeamScore.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
通过这些更正,它会在我身上运行。