我试图通过扩展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