java - 自定义 AlertDialog 无法在 onCreate() 中初始化

标签 java android android-alertdialog oncreate

我正在尝试通过扩展 AlertDialog 类来构建自定义 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 淡出并失去焦点,但我的对话框没有显示一个像素。按 BackActivity 带回前台,向我表明对话框实际上显示,但只是一个完全空的一个。

但是,当我创建一个 AlertDialog 并使用例如 dlg.setButton(BUTTON_POSITIVE, "Click me", (DialogInterface.OnClickListener)null); 对话框显示有相应的按钮。
即使当我使用与上面完全相同的代码在其构造函数中设置我的自定义对话框时,一切似乎都工作正常。

现在,这怎么可能?为什么我似乎无法在其 onCreate() 方法中初始化我的对话框?这不是您应该初始化任何 GUI 元素的方式吗?我错过了什么?

编辑

请注意,“显示”了某物,使 Activity 淡出并从中获取焦点。只是它似乎完全是空的/看不见的。

这里是另一个尝试:

    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() 中这样做吗? - 如果我改为在构造函数中进行上述初始化,我会遇到麻烦吗? (无论如何,这对我来说似乎不太干净。)

最佳答案

您需要调用 show() 方法才能看到一些东西。

关于java - 自定义 AlertDialog 无法在 onCreate() 中初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8687651/

相关文章:

java - 如何测量运行时的网络吞吐量

java - 尝试使用 JFileChooser 选择文件夹

android - 捕获图像的单个文件名,覆盖以前的图像,即 ."TestPic.jpg"

安卓屏幕方向 : lock only parts of the layout

java - 如何制作一个 "do not ask me again"的对话框弹出框?安卓

java - Java如何知道使用lambda表达式时应该重写哪个方法

Java:线程之间的通信仅限于一个方法

android - 当我在 user-interface-samples 项目中运行 Notifications 应用程序时,是什么原因导致 "java.lang.NullPointerException"错误?

android - AlertDialog 关闭不工作

android - 为什么我的警报对话框会崩溃