java.lang.IllegalStateException при добавлении просмотра в режиме отладки - PullRequest
1 голос
/ 30 мая 2011

Я использую 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 (), потому что кажется, что в некоторых случаях он слишком быстро добавляет представления.

1 Ответ

0 голосов
/ 30 мая 2011

Почему бы не переместить создание представления за пределы задачи или может быть в onProgressUpdate, потому что оно выполняется в потоке пользовательского интерфейса, а doInBackground - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...