【问题标题】:Fragment not associated with a fragment manager. (Dialog Fragment)片段未与片段管理器关联。 (对话片段)
【发布时间】:2020-10-03 18:41:35
【问题描述】:

我有一个对话框片段,并且我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是:Fragment not associated with a fragment manager。

我也尝试过发布Delayed dimiss,但仍然崩溃。

LoadingDialog.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()
    }
}

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
}

Extensions.kt

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

LoginActivity.kt

private val loadingDialog: LoadingDialog by loadingDialog()

【问题讨论】:

    标签: android android-fragments kotlin android-dialogfragment lazy-initialization


    【解决方案1】:

    您可能试图在片段的onDestroy 方法中将其关闭,至少我是这样。将dismiss 方法调用移动到您的活动或片段的onStop

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多