gpt4 book ai didi

Android 创建和初始化窗口而不显示它

转载 作者:行者123 更新时间:2023-11-30 01:56:17 28 4
gpt4 key购买 nike

我有一个对话框,里面有一些 UI 元素。此对话框稍后通过 show() 创建并显示。我可以使用默认构造函数 Dialog(Context) 创建对话框。但我的内容 View 仅在 onCreate 上设置,它在 show() 函数之后调用。当我尝试像这样修改 UI 元素时,这会导致 NPE:

public void showNumber(String number)
{
labelNumber.setText(number);
show();
}

但是如果像下面这样调用上面的函数,它大部分时间都可以工作。 (有时如果手机变慢,它会失败,因为 setContentView 在执行 setText 时不会被调用)

public void showNumber(String number)
{
show();
labelNumber.setText(number);
}

如何创建对话框并设置内容 View 而不显示它。如果我手动调用 setContentView(),它会在我第一次调用 show() 时被重新调用。

最佳答案

您需要做的就是在构建对话框时调用 create();

当您调用 show 时,只有当 create(); 没有被调用时,它才会创建对话框,然后在对话框上调用 onStart();。最后,它将对话框附加到窗口。

类似于:

Dialog myDialog = new Dialog(context) {
protected void onCreate() {
super.onCreate();
doYourThing
}
};
myDialog.create();

我假设您在 onCreate 中执行逻辑,因为在 Dialog 中它只是一个供子类覆盖的空方法。

创建时: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/app/Dialog.java#37

显示: http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/app/Dialog.java#254

Pre API level 21(如果你不能使用 AlertDialog.Builder)你应该能够使用 onRestoreInstanceState 做你想做的事,像这样(这是一个 hack):

Bundle myBundle = new Bundle();
myBundle.putBoolean("android:dialogShowing", false);
myBundle.putBundle("android:dialogHierarchy", new Bundle());
myDialog.onRestoreInstanceState(myBundle);

信息:

http://androidxref.com/4.4_r1/xref/frameworks/base/core/java/android/app/Dialog.java#411

关于Android 创建和初始化窗口而不显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32164623/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com