如何正确地从 dialogfragment 启动 dialogframent?

How to start dialogframent from dialogfragment properly?

我从对话片段 A 开始对话片段 B

CreateNewPlayListDialog newPlayListDialog = new CreateNewPlayListDialog();
                    Bundle b = new Bundle();
                    b.putInt("id", videoId);
                    newPlayListDialog.setArguments(b);
                    newPlayListDialog.show(getChildFragmentManager(), "dialog_new_playlist");

就是这样。但是 firstDialogFragment 没有被取消。
如果我尝试

CreateNewPlayListDialog newPlayListDialog = new CreateNewPlayListDialog();
                    Bundle b = new Bundle();
                    b.putInt("id", videoId);
                    newPlayListDialog.setArguments(b);
                    newPlayListDialog.show(getChildFragmentManager(), "dialog_new_playlist");
                    PlayListChooserDialog.this.dismiss();

然后dialogfragment B启动并立即取消,Dialog A保留;

如何从dialog Am启动dialog B,比如dialog A会被取消?

Fragment dismissal 仅仅是从堆栈中移除最后一个 fragment 的包装器。

请将最后两行交换为:

PlayListChooserDialog.this.dismiss();
newPlayListDialog.show(getChildFragmentManager(), "dialog_new_playlist");

如果出现异常(取决于代码的其余部分在做什么),那么最安全的方法是直接访问 activity 中的方法并从那里加载另一个片段,例如

public final ApplicationActivity extends Activity {
    public void onDialog(String whichOne) {
        if (TextUtils.isEmpty(whichOne) {
            return;
        }
        if (whichOne.equals.PlayListDialog.NAME) {
            newPlayListDialog.show(getChildFragmentManager(), "dialog_new_playlist");
        }
        else if(...) {
            ...
        }
    }
}

public final PlayListDialog extends DialogFragment {
    public static final String NAME = PlayListDIalog.class.getSimpleName();
    ...
}

然后在您的代码中关闭片段 A

((ApplicationActivity) getActivity()).onDialog(PlayListDialog.NAME);
 PlayListChooserDialog.this.dismiss();