我知道这是前一段时间问的,但是我发现这里有一个非常简洁的解决方案。
我定义一个接口是这样的:
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。现在,如果我想开一个名为“DialogTwo”内部“DialogOne”新的对话框,我可以写作称之为:
InterfaceHolder.get().showDialog(new DialogTwo());
dismiss();
瞧,DialogTwo所示。显然,你必须小心确保对你的活动的引用已经传递给InterfaceHolder(一个很好的方法是将InterfaceHolder.set(this);放在showDialog方法中),但是否则这似乎工作精美。
谢谢比尔!这工作!显然调用活动上下文的showDialog()不会。 – Akshay 2011-04-14 13:55:24
我不确定我是否已接受Usage_alertDialog.cancel();在正确的地方,但我可以告诉你,当我取消它onClick(),然后尝试创建后续对话框时,它导致了一个关闭的力量。所以,在第二个对话框的cancel()之后移动它的.cancel()就显得很自然。 – 2011-04-14 14:20:53
您可能还会注意到那里有一些很酷的Google Analytics技巧......我在记录此应用程序的运行是新安装还是升级。如果是升级版,我会记录它们的版本以及正在安装的版本:1.5-> 1.8等。 – 2011-04-14 14:24:50