0

我必须在 java 中创建一个表,并且在执行之前不知道行数。所以我有以下创建表的java代码。但是,当我尝试将表格行添加到表格布局时,它会引发非法状态异常。我将如何解决这个问题?

 Map<Integer,TableRow> kMap = null;
   for(int i=0;i<noofrows;i++)
   {

         TableRow test=new TableRow(this);
          kMap = new HashMap<Integer,TableRow>();
         for(int k = 0; k < 3; k++)
         {
           kMap.put(k, test);
         }

     }
TextView empty = new TextView(this);

// title column/row
TextView title = new TextView(this);
title.setText("Java Weather Table");


TableRow.LayoutParams params = new TableRow.LayoutParams();
params.span = 6;

rowTitle.addView(title, params);

//Add some more fields to the rows

table1.addView(rowTitle);
table1.addView(kMap.get(0));
//Exception is thrown
table1.addView(kMap.get(1));
table1.addView(kMap.get(2));
//table1.addView(rowConditions);

setContentView(table1);

记录猫跟踪:

09-14 07:02:50.265: E/AndroidRuntime(384): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
09-14 07:02:50.265: E/AndroidRuntime(384):  at android.view.ViewGroup.addViewInner(ViewGroup.java:1970)
09-14 07:02:50.265: E/AndroidRuntime(384):  at android.view.ViewGroup.addView(ViewGroup.java:1865)
09-14 07:02:50.265: E/AndroidRuntime(384):  at android.widget.TableLayout.addView(TableLayout.java:418)
09-14 07:02:50.265: E/AndroidRuntime(384):  at android.view.ViewGroup.addView(ViewGroup.java:1822)
09-14 07:02:50.265: E/AndroidRuntime(384):  at android.widget.TableLayout.addView(TableLayout.java:400)
09-14 07:02:50.265: E/AndroidRuntime(384):  at android.view.ViewGroup.addView(ViewGroup.java:1802)
09-14 07:02:50.265: E/AndroidRuntime(384):  at android.widget.TableLayout.addView(TableLayout.java:391)
4

1 回答 1

0

这不是您的代码的唯一问题,但您抱怨的问题是因为您只创建了一个 TableRow 并添加了 3 次。您的 kMap 需要包含 3 个不同的 TableRow 对象,而不是 3 次相同的对象。

于 2012-09-14T02:41:51.493 回答