如何正确地从 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();
我从对话片段 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();