DialogFragment.onDismiss() Kotlin 中的空指针异常

DialogFragment.onDismiss() null pointer exception in Kotlin

这是 Kotlin,不是 Java,仅供参考。

我有一个正在使用的 DialogFragment 子类,当它被关闭时我遇到了一些崩溃。它不会每次都发生,而且我似乎无法找到它的模式。崩溃发生在被覆盖的 onDismiss() 函数内部,作为自动 Kotlin Intrinstics.checkParameterIsNotNull() 调用。这是我的对话框子类中反编译的 Kotlin->Java 代码:

 public void onDismiss(@NotNull DialogInterface dialog) {
   Intrinsics.checkParameterIsNotNull(dialog, "dialog");
   super.onDismiss(dialog);
}

这里是崩溃信息:

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter dialog
at com.foo.MyDialogFragment.onDismiss(Unknown Source:2)

这是 DialogInterface 参数,它发生在我的任何代码运行之前,所以我无法采取任何措施来阻止它。不可能在此之前进行检查,因为 Kotlin 编译器会在我的任何代码之前插入空检查。

我正在通过在所有者 Activity 的 onStop()

中调用这个来关闭对话框
myDialog?.dismissAllowingStateLoss()

知道是什么原因造成的,更重要的是,我该怎么办?看起来这不应该发生,因为接口指定它不能是 null.

这可能是由于 Android 问题跟踪器上的 this bug,该问题已在 androidx.fragment 版本 1.2.0 中修复。更新到该版本的 androidx.fragment 应该可以解决问题。

具体来说,当对话框已经被销毁时,cancel/dismiss 回调的时间似乎有问题。