我有一个初始化 Google plus 视图的对话框片段,有时这些视图会失败,所以我想在那个时候杀死对话框,然后再显示给用户。
如何结束对话框创建过程?从返回 Dialog 对象的 onCreateDialog 返回 null 会破坏程序。
我有一个初始化 Google plus 视图的对话框片段,有时这些视图会失败,所以我想在那个时候杀死对话框,然后再显示给用户。
如何结束对话框创建过程?从返回 Dialog 对象的 onCreateDialog 返回 null 会破坏程序。
如果您想在 onCreateDialog 中关闭 DialogFragment,您可以执行以下操作:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
setShowsDialog(false);
dismiss();
return null;
}
无需重写 onActivityCreated()。
onActivityCreated()
使用after 调用的 Fragment 回调解决了它OnCreateDialog()
。我返回一个有效的对话框,onCreateDialog()
但标志dismiss
应该关闭对话框。
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(dismiss) {
this.dismiss();
}
}
其他答案有点过时,一个对我不起作用(在那里写了我的评论),所以这就是我认为更新和工作的内容:
在onCreateDialog
回调上,有你的逻辑何时成功。如果失败,则返回一些默认对话框(无论如何都不会使用),同时添加到生命周期的 onStart 回调以关闭 DialogFragment(使用dismiss
或dismissAllowingStateLoss
):
fun Lifecycle.runOnStarted(runnable: () -> Unit) {
addObserver(object : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
runnable.invoke()
}
})
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
//create the builder of the dialog, and then check if need to dismiss
if (needToDismiss) {
lifecycle.runOnStarted{
dismissAllowingStateLoss()
}
return builder.create()
}
或者,使用 kotlin 协程而不使用我制作的辅助函数:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
//create the builder of the dialog, and then check if need to dismiss
if (needToDismiss) {
lifecycleScope.launch {
whenStarted {
dismissAllowingStateLoss()
}
}
return builder.create()
}
或者你可以使用这个使用 kotlin 协程的辅助函数来使它更短一点:
fun LifecycleOwner.runOnStarted(runnable: () -> Unit) {
lifecycleScope.launch {
whenStarted{
runnable.invoke()
}
}
}
用法会和以前一样短:
runOnStarted{
dismissAllowingStateLoss()
}
请注意,我使用 onStart 回调而不是 onCreate。原因是在某些情况下,onStart 有效,而 onCreate 无效。