我想显示进度条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
。
答案 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)
}
}