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