与片段管理器无关的片段。(对话片段)

Ich*_*cta 9 android lazy-initialization android-fragments android-dialogfragment kotlin

我有一个对话框片段,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是:片段与片段管理器无关。

我也尝试过 postDelayed dimiss,但仍然崩溃。

加载对话框.kt

class LoadingDialog(private val fm: FragmentManager) : DialogFragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        isCancelable = false
        return inflater.inflate(R.layout.dialog_loading, container, false)
    }

    fun showDialog(tag: String? = null) {
        show(fm, tag)
    }

    fun closeDialog() {
        dismiss()
    }
}
Run Code Online (Sandbox Code Playgroud)

LazyDialog.kt

class LazyDialog<T : DialogFragment>(private val type: Class<T>, private val fm: FragmentManager) :
    Lazy<T> {
    private var dialog: T? = null

    override val value: T
        get() {
            return when {
                type.isAssignableFrom(LoadingDialog::class.java) -> {
                    LoadingDialog(fm).also {
                        dialog = it as T
                    } as T
                }
                else -> throw IllegalArgumentException("Unknown class : ${type.name}")
            }
        }

    override fun isInitialized(): Boolean = dialog != null
}
Run Code Online (Sandbox Code Playgroud)

扩展.kt

inline fun <reified T : DialogFragment> FragmentActivity.loadingDialog(): Lazy<T> {
    return LazyDialog(T::class.java, supportFragmentManager)
}
Run Code Online (Sandbox Code Playgroud)

登录活动.kt

private val loadingDialog: LoadingDialog by loadingDialog()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Wac*_*oon 1

你可能试图用onDestroy片段的方法来驳回它,至少我是这样。将dismiss方法调用移动到onStop您的 Activity 或片段中。