我有一个包含一些UI元素的对话框。此对话框将在稍后通过show()
创建并显示。我可以使用默认构造函数Dialog(Context)
创建对话框。但我的内容视图仅设置在onCreate
函数之后调用的show()
上。当我尝试修改这样的UI元素时,这会导致NPE:
public void showNumber(String number)
{
labelNumber.setText(number);
show();
}
但是如果呼叫改变上面的功能如下,它大部分时间都有效。 (如果手机变慢,有时会失败,因为setContentView
在执行时setText
不会被调用{/ 1}}
public void showNumber(String number)
{
show();
labelNumber.setText(number);
}
如何创建对话框并设置内容视图而不显示它。如果我手动拨打setContentView()
,我第一次拨打show()
时会重新呼叫。
答案 0 :(得分:1)
您需要做的就是在构建对话框时调用create();
。
当您调用show时,只有在create();
未被调用时才会创建对话框,然后在对话框中调用onStart();
。最后,它会将对话框附加到窗口。
类似的东西:
Dialog myDialog = new Dialog(context) {
protected void onCreate() {
super.onCreate();
doYourThing
}
};
myDialog.create();
我假设您正在onCreate中执行逻辑,因为在Dialog中它只是一个空子方法,可以覆盖子类。
的onCreate: 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等级21(如果你不能使用AlertDialog.Builder)你应该可以使用onRestoreInstanceState
来做你想做的事情,比如这个(这是一个黑客):< / p>
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