0

我有一个页面,将显示一项选定运动的为期数周的预定比赛。选定的运动和星期存储在页面开头打开的 XML 文件中。当我点击下周链接时,一个新的星期日期值被存储到这个 xml 文件中,然后页面被重新加载。现在应该显示下周的任何游戏。这些游戏显示在一个表格布局中,我在其中以编程方式根据需要在 .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”是用于创建表格行或表格行中的文本视图。

谁能告诉我我做错了什么?

谢谢

4

3 回答 3

4

我的猜测是,随着页面重新加载以显示本周的游戏,您使用布局充气器来充气细节布局?

布局充气器是我看到此错误发生的唯一地方,如果是这种情况,请将 false 的第三个参数传递给充气方法,否则它将尝试充气视图的根,从而抛出此异常在你。

IE

inflater.inflate(R.layout.profile, container, false);
于 2012-01-26T23:21:24.757 回答
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); 
}

正如我已经测试过的那样,它会对你有帮助。

如果没有,那么让我通知。

或者

如果您仍然想用自己的代码做一些事情,那么请理解这个例子

它肯定会帮助你。

享受。:))

于 2012-01-27T04:56:21.240 回答
0

如我所见,您已经纠正了一些错误。更正两个:

    tvHomeTeamName.setLayoutParams(new TableRow.LayoutParams (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

...

    tvHomeTeamScore.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

有了这些更正,它就会冲向我。

于 2012-01-30T14:23:59.500 回答