如何以编程方式解雇DialogFragment?我目前正在通过以下方式创建对话框:
void showDialogWithId(int id){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
if (id == SEARCHING_DIALOG){
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(SEARCHING_DIALOG,"TEST");
newFragment.show(ft, "dialog");
}
if (id == CONNECTING_DIALOG){
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTING_DIALOG,"TEST");
newFragment.show(ft, "dialog");
}
if (id == CONNECTIVITY_DIALOG){
// Create and show the dialog.
DialogFragment newFragment = MyDialogFragment.newInstance(CONNECTIVITY_DIALOG);
newFragment.show(ft, "dialog");
}
}
我希望通过以下方式解雇他们:
public void dismissDialog(){
getFragmentManager().popBackStack();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
}
但是,对话框没有被驳回......
答案 0 :(得分:65)
尝试使用
getDialog().dismiss();
DialogFragments内部。因此,例如,您可以通过其标记找到DialogFragment,就像您这样做,然后在其上调用一些调用此代码的方法。我通常不会从Activity中启动DialogFragment的解雇,我的对话框按钮为我做了。但我认为这也应该有效。我不确定这会如何影响片段后台堆栈。
答案 1 :(得分:21)
要聚合上一个响应和相关注释,要删除您必须执行的对话:
public void dismissDialog(){
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
DialogFragment df = (DialogFragment) prev;
df.dismiss();
}
}
答案 2 :(得分:0)
在我的用例中,我执行以下操作:
在您显示对话框的活动(或任何其他地方)中定义成员变量:
private DialogFragment mMyDialog;
然后在显示之前指定mMyDialog:
mMyDialog = MyDialog.newInstance(...whatever vars...); // MyDialog is extended from DialogFragment
mMyDialog.show();
最后在你需要解雇对话的地方说:
if (mMyDialog != null) {
mMyDialog.dismiss();
mMyDialog = null;
}
答案 3 :(得分:0)
MyProgressDialog
是一个扩展DialogFragment
//如何展示
MyProgressDialog pd = new MyProgressDialog();
Bundle b = new Bundle();
b.putString(ProgressDialog.PROGRESS_TITLE, "Loading data");
b.putString(ProgressDialog.PROGRESS_MESSAGE, "Getting your data from server");
b.putBoolean(ProgressDialog.PROGRESS_IS_CALLBACK_NEEDED, false);
pd.setArguments(b);
pd.show(getActivity().getSupportFragmentManager(), ProgressDialog.class.getSimpleName());
//如何解雇
if (pd != null && pd.isAdded()) {
pd.dismiss();
pd = null;
}
答案 4 :(得分:0)
也许它会对我有所帮助, super.dismiss(); 做工作。