簡體   English   中英

如何在kotlin中覆蓋Android中的Dialog Fragment中的onCancel?

[英]How to override onCancel in Dialog Fragment in Android in kotlin?

我想顯示一個進度條DialogFragment 它將被取消,直到它被取消或被解雇。 如果用戶按下后退按鈕或觸摸對話框外,可以取消它,如果用戶在任務完成之前沒有取消它,則可以取消。 所以,我想為兩者設置listeners ,以便我可以根據情況做出回應。 正在從Fragment中調用對話框。

根據這個 ,我不能設置listeners ,而是我必須override方法。 我的主要問題是,我不知道如何在kotlin這樣做。 我已經寫了下面的一些代碼,但它不完整。 請在需要時更正代碼。

我現在只想實現onCancel 請告訴我們是否需要以某種不同的方式實現onDismiss 按照這里的解決方案,這是我編碼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

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)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM