【发布时间】:2011-05-30 04:24:37
【问题描述】:
我正在使用 AsyncTask,但在 onProgressUpdate 方法中出现以下错误:
java.lang.IllegalStateException: 指定的孩子已经有一个父母。 您必须在 首先是孩子的父母。在 android.view.ViewGroup.addViewInner(ViewGroup.java:1970) 在 android.view.ViewGroup.addView(ViewGroup.java:1865) 在 android.widget.TableLayout.addView(TableLayout.java:418)
我知道这个错误意味着什么以及如何解决它。我不明白为什么我只在调试模式下收到此错误。将 Thread.Sleep(1000) 添加到 doInBackground 方法实际上可以解决问题,但出于明显的性能原因,我不能添加它。 以下是我的 AsyncTask 中发生的事情的要点:
protected Void doInBackground(Void... params) {
row1 = TableVisuals.createRow(context, flag);
tv1 = TableVisuals.getTextView(context, Info[0]);
row2 = TableVisuals.createRow(context, flag);
tv2 = TableVisuals.getTextView(context, Info[1]);
publishProgress(i,0);
}
protected void onProgressUpdate(Integer... value) {
table.addView(row1);
row1.addView(tv1, 0, span);
table.addView(row2);
row2.addView(tv2, 0, span);
dialog.setProgress(value[0]);
}
请记住,上述代码的任何部分都不会发生 IllegalStateException。它在某些地方不一致,但几乎总是发生。我希望后台线程有一种方法可以等待 Thread.Sleep() 以外的 UI 线程,因为在某些情况下它似乎添加视图的速度太快了。
【问题讨论】:
标签: android debugging android-asynctask