Android 在对话框被取消后,当我转到上一个片段时,如何防止对话框出现?

Android 在对话框被取消后,当我转到上一个片段时,如何防止对话框出现?,android,android-fragments,android-alertdialog,Android,Android Fragments,Android Alertdialog,所以现在,当我从片段A转到片段B,在片段B的onCreate()中显示一个对话框,然后(通过单击对话框的关闭按钮)将其取消,并返回到上一个片段(片段A),出于某种原因,该对话框再次出现(在片段A)中)。如果我重复动作5次,然后每5次都返回(到上一个片段[片段A]),则对话框在上一个片段(片段A)中一行出现5次。出于某种原因,他正在录制正在显示的对话框 所以我的对话框代码是: fun Fragment.showDialog(fragment: DialogFragment, tag: String

所以现在,当我从
片段A
转到
片段B
,在
片段B
onCreate()
中显示一个对话框,然后(通过单击对话框的关闭按钮)将其取消,并返回到上一个片段(
片段A
),出于某种原因,该对话框再次出现(在
片段A
)中)。如果我重复动作5次,然后每5次都返回(到上一个片段[
片段A
]),则对话框在上一个片段(
片段A
)中一行出现5次。出于某种原因,他正在录制正在显示的对话框

所以我的对话框代码是:

fun Fragment.showDialog(fragment: DialogFragment, tag: String) {
    val ft = fragmentManager?.beginTransaction()
    val dialog = fragmentManager?.findFragmentByTag(tag) as? DialogFragment
    dialog?.let {
        ft?.remove(it)
    }
    dialog.
    ft?.addToBackStack(null)
    fragment.show(ft, tag)
}
showDialog(SuccessDialog.newInstance(), SuccessDialog.TAG)
class SuccessDialog : DialogFragment() {

    companion object {
        const val TAG = "SUCESS_DIALOG"
        fun newInstance() = SuccessDialog()
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View =
            inflater.inflate(R.layout.dialog_success, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        dialog?.window?.setBackgroundDrawableResource(android.R.color.transparent)
        dialog?.window?.setDimAmount(0.8f)

        closeButton.setOnClickListener {
           dialog.cancel()
            dialog.dismiss()
        }

    }
}
我对片段中对话框的调用如下:

fun Fragment.showDialog(fragment: DialogFragment, tag: String) {
    val ft = fragmentManager?.beginTransaction()
    val dialog = fragmentManager?.findFragmentByTag(tag) as? DialogFragment
    dialog?.let {
        ft?.remove(it)
    }
    dialog.
    ft?.addToBackStack(null)
    fragment.show(ft, tag)
}
showDialog(SuccessDialog.newInstance(), SuccessDialog.TAG)
class SuccessDialog : DialogFragment() {

    companion object {
        const val TAG = "SUCESS_DIALOG"
        fun newInstance() = SuccessDialog()
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View =
            inflater.inflate(R.layout.dialog_success, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        dialog?.window?.setBackgroundDrawableResource(android.R.color.transparent)
        dialog?.window?.setDimAmount(0.8f)

        closeButton.setOnClickListener {
           dialog.cancel()
            dialog.dismiss()
        }

    }
}
我的成功对话框片段如下:

fun Fragment.showDialog(fragment: DialogFragment, tag: String) {
    val ft = fragmentManager?.beginTransaction()
    val dialog = fragmentManager?.findFragmentByTag(tag) as? DialogFragment
    dialog?.let {
        ft?.remove(it)
    }
    dialog.
    ft?.addToBackStack(null)
    fragment.show(ft, tag)
}
showDialog(SuccessDialog.newInstance(), SuccessDialog.TAG)
class SuccessDialog : DialogFragment() {

    companion object {
        const val TAG = "SUCESS_DIALOG"
        fun newInstance() = SuccessDialog()
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View =
            inflater.inflate(R.layout.dialog_success, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        dialog?.window?.setBackgroundDrawableResource(android.R.color.transparent)
        dialog?.window?.setDimAmount(0.8f)

        closeButton.setOnClickListener {
           dialog.cancel()
            dialog.dismiss()
        }

    }
}
这是我的活动主背压主体:

supportFragmentManager.popBackStack()

你能添加FragmentA和FragmentB,以及打开FragmentA的人吗?FragmentA和B太长了,我想他们不会把任何东西带到桌子上,因为这只是对话框显示的问题。:/我可以把我的主要活动放回去,让你看一看。很难说,但我觉得奇怪的一件事是在e back stack。通常不会这样做。可能会删除add to stack和pop back stack调用。另外,在显示对话框的位置显示完整代码。