如何在Kotlin的Android中的Dialog Fragment中覆盖onCancel?

时间:2019-06-16 22:59:40

标签: android kotlin overriding android-dialogfragment

我想显示进度条DialogFragment。 它会一直显示到取消或取消为止。 如果用户按下“后退”按钮或触摸对话框外部,则可以将其取消;如果用户在任务完成之前未取消它,则可以将其取消。 因此,我想同时设置listeners以便我根据情况作出响应。 该对话框是从Fragment调用的。

根据this,我无法设置listeners,而必须设置override方法。 我的主要问题是,我不知道如何在kotlin中执行此操作。 我已经在下面编写了一些代码,但是它不完整。请根据需要更正代码。

我现在仅尝试实现onCancel。请告知是否需要以其他不同方式实施onDismiss。 按照解决方案here, 这就是我对Fragment进行编码的方式:

class MyFragment: Fragment(), DialogInterface.OnCancelListener {

    // other code

    private fun myFun() {
        // show progress dialog
        val myDialog = DialogProgress()
        myDialog.show(childFragmentManager, "null")

        // todo the long task of downloading something
        // myDialog.dismiss()
    }

    override fun onCancel(dialog: DialogInterface?) {
        // User canceled the dialog
        Toast.makeText(activity, "Process canceled by user!", Toast.LENGTH_SHORT).show()
        // todo
    }

}

这是我的DialogFragment代码:

class DialogProgress: DialogFragment() {

    override fun onCancel(dialog: DialogInterface?) {
        super.onCancel(dialog)
        // need help here
    }

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        super.onCreateDialog(savedInstanceState)

        // show progress dialog
        val v = activity!!.layoutInflater.inflate(R.layout.dialog_progress, null)
        v.findViewById<TextView>(R.id.progress_message).text = "Fetching data"

        return activity!!.let {
            val builder = AlertDialog.Builder(it, R.style.ThemeOverlay_AppCompat_Dialog)
            builder
                .setView(progressView)
                .create()
        }

    }
}

对于需要帮助的上述代码,我不知道如何将下面的Java代码从上面给出的解决方案链接转换为kotlin

@Override
public void onDismiss(final DialogInterface dialog) {
    super.onDismiss(dialog);
    Fragment parentFragment = getParentFragment();
    if (parentFragment instanceof DialogInterface.OnDismissListener) {
        ((DialogInterface.OnDismissListener) parentFragment).onDismiss(dialog);
    } 
}

请注意,这是给onDismiss的,我想要给onCancel

1 个答案:

答案 0 :(得分:0)

只需将Java代码粘贴到Android Studio中即可将其转换为kotlin代码,然后会出现一个弹出窗口。 这是Java代码的转换:

override fun onCancel(dialog: DialogInterface?) {
    super.onCancel(dialog)
    val parentFragment = parentFragment
    if (parentFragment is DialogInterface.OnCancelListener) {
        (parentFragment as DialogInterface.OnCancelListener).onCancel(dialog)
    }
}