【问题标题】:Android: spinner in alertdialog crashedAndroid:警报对话框中的微调器崩溃
【发布时间】:2017-09-23 10:36:53
【问题描述】:

我在警报对话框中有微调器。如果 alertdialog 正在显示并且屏幕方向已更改 - 一切正常。警报对话框仍然显示。但是,如果微调器打开并且屏幕方向发生更改,则应用程序崩溃,视图未附加到窗口管理器。我在 onDestroy 中尝试了 alertdialog.dismiss(),但没有成功。有什么想法吗?

LayoutInflater li = LayoutInflater.from(ScrollingActivity.this);
View promptsView = li.inflate(R.layout.popup_layout, null);
AlertDialog.Builder alertDialogBuilder = new 
AlertDialog.Builder(ScrollingActivity.this, R.style.MyAlertDialogStyle);

alertDialogBuilder.setView(promptsView);

alertDialogBuilder.setTitle(R.string.def_recipe_lang);
alertDialogBuilder.setIcon(R.drawable.ic_language_orange_24px);
// create alert dialog
alertDialog = alertDialogBuilder.create(); 
alertDialog.show();
alertDialog.setCanceledOnTouchOutside(false);

错误: 09-23 15:06:27.745 15519-15519/com.example.user.coordinatortest E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IllegalArgumentException:视图未附加到窗口管理器 在 android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:385) 在 android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:287) 在 android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:79) 在 android.app.Dialog.dismissDialog(Dialog.java:323) 在 android.app.Dialog.dismiss(Dialog.java:306) 在 android.widget.Spinner$DialogPopup.dismiss(Spinner.java:840) 在 android.widget.Spinner.onDetachedFromWindow(Spinner.java:414) 在 android.support.v7.widget.AppCompatSpinner.onDetachedFromWindow(AppCompatSpinner.java:399) 在 android.view.View.dispatchDetachedFromWindow(View.java:12024) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2612) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2610) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2610) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2610) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2610) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2610) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2610) 在 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2610) 在 android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:2950) 在 android.view.ViewRootImpl.doDie(ViewRootImpl.java:4535) 在 android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3318) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:194) 在 android.app.ActivityThread.main(ActivityThread.java:5431) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 您是否尝试通过代码进行调试或查看 logcat?
  • 请至少为警报框发布您的代码

标签: java android spinner android-spinner android-alertdialog


【解决方案1】:

“我在 onDestroy 中尝试了 alertdialog.dismiss()”,----这是正确的,但您必须在 Onpause() 中而不是在 Ondestroy() 中这样做。

Ondestroy 将在屏幕销毁时执行,而不是在方向改变时执行。

试试这个,如果您遇到错误,请发布您的代码和 android 监视器错误以获得适当的答案。

【讨论】:

  • onPause 也无济于事。改变方向的 Livecycle 是: onSaveInstanceState onPause onStop onDestroy onCreate onStart onRestoreInstanceState onResume 。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多