以编程方式解除DialogFragment

时间:2011-11-28 17:05:25

标签: android

如何以编程方式解雇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);


}

但是,对话框没有被驳回......

5 个答案:

答案 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(); 做工作。