我在stackoverflow上发现了很多类似的问题,但是解决方案在我的情况下不起作用.它们与onSaveInstanceState方法和支持库特别相连.
我有一个事件运行的Activity这个代码:
MyDialogFragment.showMyDialog(name,this,this);
name参数是String对象.第二个参数(这个)就是Activity类的对象,第三个也是简单的接口.这个我的Activity实现了这个接口. showMyDialog()当然是静态方法.这是它的身体:
MyDialogFragment fragment = new MyDialogFragment(listener,"Hello " + name); fragment.show(activity.getFragmentManager(),"myDialog");
这是第一次尝试的工作.但在第二个我得到这个例外:
E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.myapp,PID: 20759 java.lang.IllegalStateException: Activity has been destroyed at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1345) at android.app.BackStackRecord.commitInternal(BackStackRecord.java:597) at android.app.BackStackRecord.commit(BackStackRecord.java:575) at android.app.DialogFragment.show(DialogFragment.java:230) at com.example.myapp.view.dialog.MyDialogFragment.showMyDialog(MyDialogFragment.java:41) at com.example.myapp.MyActivity.showMyDialog(MyActivity.java:208) at com.example.myapp.MyActivity.onEvent(MyActivity.java:232) at com.example.myapp.MyActivity.handleMessage(MyActivity.java:89) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)
一般来说,这是重现我的例外的步骤:
>输入活动 – 收到事件,显示MyDialogFragment.
>按负号按钮关闭对话框.
>再次输入活动 – 再次显示MyDialogFragment.
>键入一些代码到EditText.
>此时验证需要一些时间.与服务器连接等,并返回否定结果.所以需要再次显示MyDialogFragment.但在这一刻,我变得异常了.
但是,当我跳过第二点并开始输入错误代码进行验证时,MyDialogFragment将显示没有任何问题.奇怪的行为
我试过非静态方法,setRetainInstance(true)和commitAllowingStateLoss.但没有什么区别.