Android 对话框在旋转时崩溃

标签 android dialog rotation illegalargumentexception window-managers

在我的应用程序中,当我打开对话框并且设备旋转时,应用程序崩溃。

我以为我已经尽一切努力自己处理轮换

在我的所有 Activity 中,我都在 list 中启用了此功能

android:configChanges="keyboardHidden|orientation"
        android:screenOrientation="fullSensor" 

对于有问题的对话框,我有这个代码

  if(!WebViewActivity.this.isFinishing() && dialog != null && dialog.isShowing()){
                dialog.dismiss();
  }

但是,如果在设备旋转时打开对话框,我仍然会收到此崩溃消息

 java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:383)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:285)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79)
at android.app.Dialog.dismissDialog(Dialog.java:323)
at android.app.Dialog.dismiss(Dialog.java:306)
at bundle.android.views.WebViewActivity$1.onPageFinished(WebViewActivity.java:133)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:323)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

或者这个错误消息

  android.view.WindowManager$BadTokenException: Unable to add window -- token  android.os.BinderProxy@42173a50 is not valid; is your activity running?

此示例涉及名为 WebViewActivity 的 Activity ,但我还有许多其他 Activity 也存在同样的问题

我觉得没有必要使用 onConfigurationChanged 生命周期方法,但欢迎任何解决方案!

最佳答案

答案是使用

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="fullSensor"

就像我使用的那样,还有一个额外的参数screenSize for android api level 13+

android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="fullSensor"

必须对 list 中对话框可能存在问题的每个 Activity 执行此操作,并放入

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

}

关于Android 对话框在旋转时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436808/

相关文章:

java - 如何在 AppCompatActivity.onCreate() 中膨胀 fragment 的布局?

android - java.lang.UnsatisfiedLinkError : couldn't find "libSTLport_shared. 所以

android - 如何以编程方式为其他应用程序读取android log cat

Android:App Compat 主题 - 大对话框

android - 激活对话框Android中的按钮

android - Rajawali 旋转相机与 Sensor.TYPE_ROTATION_VECTOR 奇怪的行为

ios - 如何以正确的方向保存视频?

android - fragment 退出动画不运行

c# - 对话框无法通过 .Show 正确显示,但又不想在 C# 中进行多线程处理时阻塞 .ShowDialog

math - 绘制带有 3D 顶点的 2D 面