为了账号安全,请及时绑定邮箱和手机立即绑定

java.lang.IllegalArgumentException:视图未附加到窗口管理器

java.lang.IllegalArgumentException:视图未附加到窗口管理器

catspeake 2019-12-11 13:09:11
我有一个活动,它将启动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 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

我可能有解决方法。


也有同样的问题,在这里我加载大量项目(通过文件系统)为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-12-12
  • 3 回答
  • 0 关注
  • 406 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信