亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java.lang.IllegalArgumentException:視圖未附加到窗口管理器

java.lang.IllegalArgumentException:視圖未附加到窗口管理器

MMTTMM 2019-10-24 15:10:02
我有一個活動,它將啟動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,但由于某些原因通過該方法被調用的時候,查看已經被銷毀,因此撤銷對話框失敗。


查看完整回答
反對 回復 2019-10-24
  • 3 回答
  • 0 關注
  • 562 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號