Fragment not associated with a fragment manager导致闪退页面,未解决

469 阅读1分钟

使用DialogFragment如果在没有调用过show方法时调用dismiss方法,就会出现异常 java.lang.IllegalStateException: Fragment DialogFragmentName(你自己的类名) not associated with a fragment manager.

弹窗源码:

package com.purui.mobile.widget.dropdown

import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentManager
import com.purui.mobile.R
import com.purui.mobile.base.BaseDialogFragment
import com.purui.mobile.databinding.DialogDropdownListBinding
import com.purui.mobile.utils.DataBindingDifferUtils
import com.purui.mobile.widget.dropdown.adapter.DropDownItem
import com.purui.mobile.widget.dropdown.viewmodel.DialogDropDownViewModel

class NewDialogDropDownList(
    val list: List<DropDownItem>?= null,
    val onItemSelect: ((DropDownItem) -> Unit)?= null
) : BaseDialogFragment<DialogDropdownListBinding>() {

    companion object {
        fun start(fragmentManager: FragmentManager, list: List<DropDownItem>, onItemSelect: (DropDownItem) -> Unit) {
            NewDialogDropDownList(
                list = list,
                onItemSelect = onItemSelect
            ).showNow(fragmentManager, "NewDialogDropDownList")
        }
    }

    private val viewModel: DialogDropDownViewModel by lazy { buildViewModel() }

    override fun resourceId() = R.layout.dialog_dropdown_list

    override fun initView() {
        binding?.vm = viewModel
    }

    override fun initData() {
        DataBindingDifferUtils.updateList(viewModel.list, list)
    }

    override fun initEvent() {
        viewModel.onItemClickCallback = {
            binding?.recyclerview?.postDelayed({
                onItemSelect?.invoke(it)
                dismiss() }, 500
            )
        }
    }

    override fun fromTop() = true

    override fun needFullScreen() = true

    override fun fullScreenHeight():Int = ViewGroup.LayoutParams.WRAP_CONTENT
}

报错:

image.png