【问题标题】:Kotlin Dialog On Dismiss Listener关闭侦听器时的 Kotlin 对话框
【发布时间】:2022-11-09 22:06:25
【问题描述】:

我创建了一个自定义对话框,当对话框被关闭时,我需要在调用该对话框的片段中做一些事情。我尝试了许多从 Java 翻译的东西,但大多数都不起作用或被弃用。任何有关如何执行此操作的建议将不胜感激。

对话片段:

class MyDialogFragment : DialogFragment() {

onAccept() {
   //do some things
   onDismiss()
}

companion object {

        private const val TAG = "My Dialog Fragment"

        fun show(
           
        ) {
            MyDialogFragment().apply {
                //args
            }.show(fragment.parentFragmentManager, TAG)
        }
    }
}

在片段中,它只是调用如下:

class doStuffFragment : AppFragment {

   fun showDialog(){
      MyDialogFragment.show(this)
   }
}

【问题讨论】:

  • FWIW,你永远不应该使用show(fragment.parentFragmentManager, TAG) - 总是使用fragment.childFragmentManager而不是父FragmentManager添加你的DialogFragment

标签: android kotlin event-listener android-dialogfragment


【解决方案1】:

您可以在相应的对话框片段中覆盖 onCancel() 方法。 您可以通过Clicking here.获取更多详细信息

override fun onCancel(dialog: DialogInterface) {
        super.onCancel(dialog)
        //Your code goes here.
    }

【讨论】:

    【解决方案2】:

    如果你使用 Fragment 来显示对话框,你应该使用childFragmentManager,这将在Fragment 中提供新的FragmentManager

    class SomeFragment : Fragment() {
        fun showDialogFromFragment() {
            DialogFragment()
                .show(this.childFragmentManager, TAG)
        }
    }
    

    除此之外,如果你想在Activity 中显示对话框,supportFragmentManager 是你的选择。

    class SomeActivity : AppCompatActivity() {
        fun showDialogFromActivity() {
            DialogFragment()
                .show(this.supportFragmentManager, TAG)
        }
    }
    

    【讨论】:

      【解决方案3】:

      我设法通过在对话框中创建自定义 onDismiss 侦听器并将其设置在“父”片段中来做到这一点。

      注意:我使用了一些不同的方法来创建对话框,但是添加侦听器也应该适用于您的情况。

      将侦听器添加到对话框:

      class MyDialogFragment : DialogFragment() {
          private var onDismissFunction: () -> Unit = {}
      
          fun setOnDismissFunction(block: () -> Unit){
              onDismissFunction = block
          }
      
          override fun onDismiss(dialog: DialogInterface) {
              onDismissFunction()
              super.onDismiss(dialog) 
          }
      

      在主片段中设置监听器:

      val dialog = MyDialogFragment()
      dialog.setOnDismissFunction {
          // your code
      }
      dialog.show(this.supportFragmentManager, MyDialogFragment.TAG)
                  
      

      我的回答基于this answer

      【讨论】:

        猜你喜欢
        • 2011-11-30
        • 2018-11-21
        • 2021-12-18
        • 2013-03-23
        • 2019-12-07
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多