我有一個活動,它將啟動AsyncTask并在操作期間顯示進度對話框。聲明該活動不能通過旋轉或鍵盤滑動來重新創建。 <activity android:name=".MyActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation" > <intent-filter> </intent-filter> </activity>任務完成后,我關閉對話框,但是在某些電話(框架:1.5、1.6)上會引發此類錯誤:java.lang.IllegalArgumentException: View not attached to window manager at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356) at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201) at android.view.Window$LocalWindowManager.removeView(Window.java:400) at android.app.Dialog.dismissDialog(Dialog.java:268) at android.app.Dialog.access$000(Dialog.java:69) at android.app.Dialog$1.run(Dialog.java:103) at android.app.Dialog.dismiss(Dialog.java:252) at xxx.onPostExecute(xxx$1.java:xxx)我的代碼是:final Dialog dialog = new AlertDialog.Builder(context) .setTitle("Processing...") .setCancelable(true) .create();final AsyncTask<MyParams, Object, MyResult> task = new AsyncTask<MyParams, Object, MyResult>() { @Override protected MyResult doInBackground(MyParams... params) { // Long operation goes here } @Override protected void onPostExecute(MyResult result) { dialog.dismiss(); onCompletion(result); }};task.execute(...);dialog.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface arg0) { task.cancel(false); }});dialog.show();根據我已閱讀(http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html)并在Android資料中看到的內容,看來這是唯一可能的解決方法例外是活動被破壞時。但是正如我已經提到的,我禁止在基本活動中進行活動娛樂。因此,任何建議都將不勝感激。
3 回答

寶慕林4294392
TA貢獻2021條經驗 獲得超8個贊
我可能有解決方法。
也有同樣的問題,在這里我加載大量項目(通過文件系統)為ListView通過AsyncTask。先onPreExecute()觸發a ProgressDialog,然后再通過onPostExecute()和onCancelled()調用(在通過顯式取消任務時調用AsyncTask.cancel())將其關閉.cancel()。
當我使用的onCancelled()方法殺死對話框時,出現了相同的“ java.lang.IllegalArgumentException:視圖未附加到窗口管理器”錯誤AsyncTask(我在出色的Shelves應用程序中看到了這一點)。
解決方法是在中創建一個AsyncTask包含以下內容的公共字段ProgressDialog:
public ProgressDialog mDialog;
然后,onDestroy()當我取消自己的時AsyncTask,我還可以通過以下方法終止關聯的對話框:
AsyncTask.mDialog.cancel();
呼叫AsyncTask.cancel()DOES觸發onCancelled()的AsyncTask,但由于某些原因通過該方法被調用的時候,查看已經被銷毀,因此撤銷對話框失敗。
- 3 回答
- 0 關注
- 562 瀏覽
添加回答
舉報
0/150
提交
取消