Как переопределить onCancel во фрагменте диалога в Android в котлине? - PullRequest
0 голосов
/ 17 июня 2019

Я хочу показать индикатор выполнения 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.

1 Ответ

0 голосов
/ 17 июня 2019

Код Java можно просто преобразовать в код kotlin, вставив его в Android Studio, и должно появиться всплывающее окно.Это преобразование кода Java:

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