我知道这个问题有一段时间了,但是我找到了一个相当不错的解决方案。
我定义了一个如下的接口:
public interface OpenDialog {
public void showDialog(DialogFragment dialog);
}
接着,我的活动实现了一个接口,当对话框被打开时,将对自身的引用传递给它,使用我的InterfaceHolder类:
public class MyActivity extends FragmentActivity implements OpenDialog {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
InterfaceHolder.set(this);
showDialog(new DialogOne());
}
public void showDialog(DialogFragment dialog) {
dialog.show(getSupportFragmentManager(), "tag");
}
InterfaceHolder 只是一个带有对接口的静态引用的类,用于在不同组件之间传递。
public class InterfaceHolder {
private static OpenDialog openDialog;
public void set(OpenDialog openDialog)
this.openDialog = openDialog;
}
public void get()
return openDialog;
}
所以showDialog方法将显示我传递给它的任何对话框;正如您可以看到,我这样做是为了显示DialogOne。现在,如果我想在“DialogOne”中打开一个名为“DialogTwo”的新对话框,我可以通过编写以下代码来调用它:
InterfaceHolder.get().showDialog(new DialogTwo());
dismiss();
然后,DialogTwo就会显示出来。显然,你需要注意确保已经将你的活动引用传递给了InterfaceHolder(一个不错的方法是在showDialog方法内部放置InterfaceHolder.set(this)),但除此之外,这似乎非常完美地运行。