Я использую AsyncTask и получаю следующую ошибку в методе onProgressUpdate:
java.lang.IllegalStateException: указанный дочерний элемент уже имеет родителя.Сначала вы должны вызвать removeView () у родителя ребенка.на 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 (), потому что кажется, что в некоторых случаях он слишком быстро добавляет представления.