以编程方式解除DialogFragment

Ale*_*lex 38 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");
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望通过以下方式解雇他们:

public void dismissDialog(){

    getFragmentManager().popBackStack();

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);


}
Run Code Online (Sandbox Code Playgroud)

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

Zso*_*agy 66

尝试使用

getDialog().dismiss();
Run Code Online (Sandbox Code Playgroud)

在DialogFragments中.因此,例如,您可以通过其标记找到DialogFragment,就像您这样做,然后调用一些调用此代码的方法.我通常不会从Activity中启动DialogFragment的解雇,我的对话框按钮为我做了.但我认为这也应该有效.我不确定这会对片段后台堆栈产生什么影响.

  • 谢谢 - 直接调用dismiss似乎工作:DialogFragment dialogFragment =(DialogFragment)getSupportFragmentManager().findFragmentByTag("dialog"); if(dialogFragment!= null){dialogFragment.dismiss(); } (22认同)

ol_*_*_er 22

要聚合先前的响应和关联的注释,要删除您必须执行的对话:

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

  • 你需要什么FragmentTransaction? (2认同)