以编程方式closuresDialogFragment

如何以编程方式解除DialogFragment? 我目前正在创build对话框:

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); } 

但是,对话并没有被解雇

尝试使用

 getDialog().dismiss(); 

在DialogFragments里面。 所以举个例子,你可以通过它的标签findDialogFragment,就像你这样做,然后调用一些调用这个代码的方法。 我通常不会从Activity启动DialogFragment,我的对话框button对我来说是这样的。 但我认为这也应该起作用。 我不知道这将如何影响片段的后台寿命。

要汇总以前的响应和相关的注释,要删除对话框,您必须:

 public void dismissDialog(){ Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); if (prev != null) { DialogFragment df = (DialogFragment) prev; df.dismiss(); } } 

在我的使用案例中,我做了以下工作:

在你的活动(或任何其他地方)显示对话框定义一个成员variables:

 private DialogFragment mMyDialog; 

然后在显示之前指定mMyDialog:

 mMyDialog = MyDialog.newInstance(...whatever vars...); // MyDialog is extended from DialogFragment mMyDialog.show(); 

最后在你需要解除对话的地方说:

 if (mMyDialog != null) { mMyDialog.dismiss(); mMyDialog = null; } 

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; }