如何两次或更多次显示相同的DialogFragment

时间:2014-09-03 11:35:08

标签: android android-dialogfragment

我的应用程序有一个按钮,当用户按下按钮时会显示自定义DialogFragmentDialogFragment显示如下:

    if(searchDialog == null)
    {
        searchDialog = new SearchElementDialog();
        searchDialog.setOnItemClickListener(searchElementItemClickListener);
    }

    searchDialog.show (getFragmentManager(), "SearchElement");

当用户完成时,以常规方式调用dismiss并删除对话框。现在,当用户再次按下相同的按钮时,我希望显示相同的对话框,处于与用户离开时相同的可见状态,调用上面第一个块中的代码会显示对话框并恢复其可视状态,但是:

屏幕没有变暗,按下对话框外部不会忽略它,它背后的控件也没有响应。

当软键盘进入视图时,对话框不会移动。

在第一次展示一切都很好。是否无法再次显示相同的对话框实例?

2 个答案:

答案 0 :(得分:1)

如果隐藏并显示对话框而不是整个片段,该怎么办。

当你想解雇电话时:

searchDialog.getDialog().dismiss();

当你想要展示它时:

searchDialog.getDialog().show();

答案 1 :(得分:0)

司马斯部分正确。显示getDialog()时,null不会返回Dialog,但会在显示Dialog时返回mDialog = getDialog()。我把它存储在我班级的一个字段中

mDialog.show()

随后被称为

public class Ring { public static void main(String[] args) { boolean a = isFlip(args); if(a) { for (int i = 0; i < args.length; i++) { System.out.print(args[i] + " "); } }else { System.out.println("NO SOLUTION"); } } public static boolean isFlip(String[] args) { for (int i = 0; i <args.length ; i++) { args[i]=args[i].toLowerCase(); } for (int i = 0; i < args.length-1 ; i++) { for (int j = i+1; j <args.length ; j++) { if (args[i].charAt(0)==(args[j].charAt(args[j].length()-1))){ String s= args[j]; args[j]=args[i]; args[i]=s; } } } for (int i = 0; i <args.length-1 ; i++) { if((args[i+1].charAt(0)!=(args[i].charAt(args[i].length()-1)))){ return false; } } if(args[args.length-1].charAt(args[args.length-1].length()-1)!=args[0].charAt(0)) return false; return true; } }

每次都有效。