2

アプリでダイアログを開いてデバイスが回転すると、アプリがクラッシュします。

私はすでに自分で回転を処理するためにすべてをやっていると思っていました

私のすべての活動で、マニフェストでこれを有効にしています

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、同じ問題を持つ他の多くのアクティビティがあります

ライフサイクル方式を使用する必要があるとは感じませんでしたがonConfigurationChanged、どのような解決策でも大歓迎です。

4

1 に答える 1

2

答えは使用することです

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

私が使用していたように、screenSizeAndroidAPIレベル13以降の追加パラメーター

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

これは、ダイアログが問題になる可能性のあるマニフェストの各アクティビティに対して実行する必要があります。

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

}
于 2013-03-19T19:03:19.460 に答える