[英]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.