我知道這是前一段時間問的,但是我發現這裏有一個非常簡潔的解決方案。
我定義一個接口是這樣的:
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