android – IllegalStateException:活动已被销毁 – 当应用程序再次尝试再次显示DialogFragment时

前端之家收集整理的这篇文章主要介绍了android – IllegalStateException:活动已被销毁 – 当应用程序再次尝试再次显示DialogFragment时前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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.但没有什么区别.

解决方法

这有点奇怪 – 或者只是这个Android功能错误.我已经添加块尝试捕获以这种方式捕获抛出异常:
MyDialogFragment fragment = new MyDialogFragment(listener,"Hello " + name);
try {
    fragment.show(activity.getFragmentManager(),"myDialog");
} catch (Exception e) {
    e.printStackTrace();
}

当然,异常仍然是抛出(并且捕捉在这一刻),有趣的是我的对话片段正在以正确的方式重新创建,用户可以与之进行交互.

猜你在找的Android相关文章