6

我有一个初始化 Google plus 视图的对话框片段,有时这些视图会失败,所以我想在那个时候杀死对话框,然后再显示给用户。

如何结束对话框创建过程?从返回 Dialog 对象的 onCreateDialog 返回 null 会破坏程序。

4

3 回答 3

6

如果您想在 onCreateDialog 中关闭 DialogFragment,您可以执行以下操作:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    setShowsDialog(false);
    dismiss();
    return null;
}

无需重写 onActivityCreated()。

于 2016-03-19T09:21:33.323 回答
3

onActivityCreated()使用after 调用的 Fragment 回调解决了它OnCreateDialog()。我返回一个有效的对话框,onCreateDialog()但标志dismiss应该关闭对话框。

public void onActivityCreated (Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if(dismiss) {
        this.dismiss();
    }
}
于 2013-07-24T17:41:43.577 回答
0

其他答案有点过时,一个对我不起作用(在那里写了我的评论),所以这就是我认为更新和工作的内容:

onCreateDialog回调上,有你的逻辑何时成功。如果失败,则返回一些默认对话框(无论如何都不会使用),同时添加到生命周期的 onStart 回调以关闭 DialogFragment(使用dismissdismissAllowingStateLoss):

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 无效。

于 2021-09-11T08:13:32.967 回答