首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误:视图未附加到窗口管理器

错误:视图未附加到窗口管理器
EN

Stack Overflow用户
提问于 2010-07-31 20:29:32
回答 5查看 25.5K关注 0票数 16

我从客户那里远程获取了以下内容,所以我不知道他们使用的是什么硬件等。

代码语言:javascript
复制
java.lang.IllegalArgumentException: View not attached to window manager
       at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
       at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
       at android.view.Window$LocalWindowManager.removeView(Window.java:417)
       at android.app.Dialog.dismissDialog(Dialog.java:279)
       at android.app.Dialog.access$000(Dialog.java:72)
       at android.app.Dialog$1.run(Dialog.java:108)
       at android.app.Dialog.dismiss(Dialog.java:263)
       at com..mysite.android.ActivityGame$1.onFinish(ActivityGame.java:154)
       at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:123)
       at android.app.ActivityThread.main(ActivityThread.java:4203)
       at java.lang.reflect.Method.invokeNative(Native Method)
       at java.lang.reflect.Method.invoke(Method.java:521)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)

发生这种情况是因为ProgressDialog

代码语言:javascript
复制
    progressDialog = new ProgressDialog( this );
    progressDialog.setMessage(getString(R.string.get_ready));
    progressDialog.setCancelable(false);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setMax(12);
    progressDialog.show();

    new CountDownTimer(3000, 250) {

         @Override
        public void onTick(long millisUntilFinished) {
             //progressDialog.incrementProgressBy(1);
         }

         @Override
        public void onFinish() {
             progressDialog.dismiss(); //********* ERROR HAPPENS HERE *********
             nextQuestion();
         }
    }.start();

清单中的活动如下所示。

代码语言:javascript
复制
<activity android:theme="@style/GameTheme" android:name=".ActivityGame" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="keyboardHidden|orientation"></activity>

那么这意味着什么呢?我认为这与活动被销毁然后创建有关,但正如您所看到的,我正确地设置了configChanges。

EN

回答 5

Stack Overflow用户

发布于 2012-03-15 21:03:27

尝试:

代码语言:javascript
复制
if (pDialog.isShowing()) {
   pDialog.cancel();
}

在被覆盖的onDestroy()onStop()方法中。

票数 22
EN

Stack Overflow用户

发布于 2010-08-01 12:16:24

它通常发生在activity关闭后调用dismiss的时候。

票数 4
EN

Stack Overflow用户

发布于 2015-05-08 01:16:54

为了处理不可见的视图,不能使用isShowing(),而应该在onDestroy()中检查窗口附件本身。

代码语言:javascript
复制
if (pDialog.getWindowToken() != null)
{
   pDialog.dismiss();
}

或者在我的例子中,我使用的不是对话框,而是一个由WindowManager添加的自定义窗口,它(可能)是不可见的。

代码语言:javascript
复制
if (test_service_overlay != null) {
     if (test_service_overlay.getWindowToken() != null) {
         WindowManager windowManager = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE);
         windowManager.removeViewImmediate(test_service_overlay);
     }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3378102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档