以编程方式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; }