Android 以编程方式解除DialogFragment

Android 以编程方式解除DialogFragment,android,Android,如何通过编程消除DialogFragment?我目前正在通过以下方式创建对话框: void showDialogWithId(int id){ FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); if (prev != null) {

如何通过编程消除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);


}
但是,不会取消对话框…

尝试使用

getDialog().dismiss();

在对话框内部。例如,您可以通过它的标记找到DialogFragment,就像您这样做一样,然后调用它上的某个方法来调用此代码。我通常不会从活动中取消DialogFragment,我的对话框按钮会为我这样做。但我认为这也应该起作用。我不确定这将如何影响片段backstack tho。

要聚合以前的响应和相关注释,要删除对话框,必须执行以下操作:

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

在我的用例中,我执行以下操作:

在显示对话框的活动(或任何其他位置)中定义成员变量:

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

也许它能帮到任何人, super.discouse();
做这项工作。

谢谢-直接调用Dislose似乎有效:DialogFragment DialogFragment=(DialogFragment)getSupportFragmentManager()。findFragmentByTag(“dialog”);如果(dialogFragment!=null){dialogFragment.disease();}我真的不明白为什么我必须以这种方式从管理器访问片段,当我们直接调用getDialog时,是什么阻止返回值?这不是删除对话框片段的推荐方法。@uDevel根据您的意见,推荐的方法是什么?ol_v_er的答案是一个很好的开始。根据我的经验,最好使用transaction、remove、commit和executePendingTransactions来避免方向更改时对话框不断返回。您需要FragmentTransaction做什么?@blubb Right。这是源代码片段中的死代码。我刚把它取下来。