У меня может быть обходной путь.
У меня возникла та же проблема, когда я загружаю множество элементов (через файловую систему) в ListView
через AsyncTask
. Если бы onPreExecute()
запустил ProgressDialog
, а затем onPostExecute()
и onCancelled()
(вызванные, когда задача была явно отменена с помощью AsyncTask.cancel()
), закрыв ее с помощью .cancel()
.
Получила ту же ошибку "java.lang.IllegalArgumentException: Просмотр не присоединен к оконному менеджеру", когда я убивал диалог в методе onCancelled()
AsyncTask
(я видел, как это было сделано в отличном Приложение полки ).
Обходной путь должен был создать в AsyncTask
открытое поле, содержащее ProgressDialog
:
public ProgressDialog mDialog;
Затем, в onDestroy()
, когда я отменяю свой AsyncTask
, я также могу убить связанный диалог через:
AsyncTask.mDialog.cancel();
Вызов AsyncTask.cancel()
ДЕЛАЕТ триггер onCancelled()
в AsyncTask
, но по какой-то причине к тому времени, когда этот метод вызывается, представление уже уничтожено, и, таким образом, отмена диалога завершается неудачей.