显示对话框片段引发“ onSaveInstanceState之后无法执行此操作”异常

时间:2019-07-11 22:09:00

标签: android android-dialogfragment

有时候,在某些设备上,由于上​​述的非法状态异常,对话框片段使活动崩溃

我尝试了showow()仅在某些设备上有用,但问题仍然存在。

val dialog = CustomDialogFragment.newInstance(false, correctAnswer, true)
dialog.show(supportFragmentManager, "alert")

我需要对话框实例供将来使用,否则我将在newInstance()之后立即使用show。可能的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

当我发现问题是由Android问题引起的时,我有以下解决方法:只需覆盖对话框片段的show()方法,如下所示:

 @Override
 public void show(@NonNull FragmentManager manager, @Nullable String tag) {
    FragmentTransaction ft = manager.beginTransaction();
    ft.add(this, tag);
    ft.commitAllowingStateLoss();
 }

答案 1 :(得分:0)

此问题的根本原因是您试图显示FragmentDialog活动已将其状态更改为onPause()。

要处理此问题,您必须在显示对话框之前检查生命周期状态

if(lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)){
   val dialog = CustomDialogFragment.newInstance(false, correctAnswer, true)
   dialog.show(supportFragmentManager, "alert")
}