我試圖通過擴展AlertDialog
類來構建自定義AlertDialog
。
和往常一樣,我在onCreate()
方法中設置對話框。或者,我想這樣做:自定義AlertDialog無法初始化onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitle("Some title");
this.setButton(BUTTON_POSITIVE, "Click me", (DialogInterface.OnClickListener)null);
final FrameLayout custom = (FrameLayout) this
.findViewById(android.R.id.custom);
custom.addView(this.getLayoutInflater().inflate(R.layout.mydlg, null),
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}
現在,當涉及到顯示該對話框的一個實例,沒有所示。 當前Activity
淡出並失去焦點,但不顯示對話框的單個像素。按返回帶來Activity
回到前臺,這表明對我來說,實際上對話框是顯示,但只是一個完全空的。
但是,當我創建一個AlertDialog
並使用(例如)dlg.setButton(BUTTON_POSITIVE, "Click me", (DialogInterface.OnClickListener)null);
時,對話框將顯示相應的按鈕。
即使當我使用與上面相同的代碼在其構造函數中設置自定義對話框時,一切似乎都可以正常工作。
現在,這怎麼可能?爲什麼我似乎無法在其onCreate()
方法中初始化我的對話框?這是不是你應該初始化任何 GUI元素的方式?我錯過了什麼?
編輯
請注意,東西是「顯示」,淡出活動,並從中取焦點。只是它看起來完全是空的/看不見的。
這裏的另一種嘗試:把我的對話框的構造函數時
this.setTitle("Some title");
this.setButton(BUTTON_POSITIVE, "Click me", (DialogInterface.OnClickListener)null);
final View v = this.getLayoutInflater().inflate(R.layout.mydlg, null);
this.setView(v);
這些精確的線條做工作。
這些確切的行不要工作時,把我的對話框的onCreate()
。
這是怎麼回事?
一般情況下,我不應該在onCreate()
嗎? - 如果我在構造函數中進行上面的初始化,我會面臨麻煩嗎? (無論如何,這對我來說似乎並不太乾淨。)
你找到任何解決方案,專門做這種方式?我面臨同樣的問題。 – 2015-03-11 04:23:13
在下面的評論中,TheTerribleSwiftTomato指出,「派生AlertDialog並在其構造函數中定製它而不是onCreate()方法」應該是一個好的做事方式。這就是我最終使用的。 – JimmyB 2015-03-19 13:52:04
嗨Hanno,我嘗試在onCreate中設置自定義對話框,其結果與您的相同,活動失去焦點並沒有顯示任何內容。但是當我在構造函數中放入相同的代碼時,android.R.id.custom的framelayout返回null。因此,你可以發佈工作代碼,以便我可以驗證我出錯的地方。謝謝。 – 2015-03-20 03:48:39