我有Activity.onCreateDialog() 我在哪里创建对话框。
我也有Activity.onPrepareDialog() 我在哪里准备对话框。
然后在我的Activity.onCreate()方法中, 我叫showDialog(id)
这一切都很好,行为也很好。现在是棘手的部分。我旋转屏幕。它会摧毁活动并创造一个新的活动。调用Activity.onCreate(),然后调用showDialog(id),但是那里已经有了一个对话框,所以最终调用onCreateDialog()两次,onPrepareDialog()两次。当屏幕方向改变并且您需要在Activity.onCreate中调用showDialog时,此处管理对话框的最佳方法是什么?
答案 0 :(得分:1)
您可以在方法onSaveInstaceState
内的包中保存对话框实例,并在方法onRestoreInstanceState
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("dialog", DIALOG_ID);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if(savedInstanceState.containsKey("dialog")){
showDialog(DIALOG_ID);
}
super.onRestoreInstanceState(savedInstanceState);
}
答案 1 :(得分:1)
http://groups.google.com/group/android-developers/browse_thread/thread/bf4c7798ee378d2
正如该页面所述:
更改为:
public void onCreate(Bundle bundle) { .... // bundle is null on first start, non-null on restart // [rather than just "if (condition is true)"] if (condition is true && bundle == null) showDialog(42); .... }
答案 2 :(得分:0)
您可以将对话框实现为单身。
static class MyProgressDialog extends ProgressDialog
{
private static MyProgressDialog dialog = null;
static MyProgressDialog newInstance( Context context )
{
if ( dialog == null )
{
dialog = new MyProgressDialog( context );
}
return dialog;
}
static MyProgressDialog getInstance()
{
return dialog ;
}
public static void destroyInstance()
{
if(dialog!= null && dialog.isShowing() ){
dialog.dismiss();
}
dialog= null;
}
private MyProgressDialog( Context context )
{
super( context );
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
if ( progressDialog != null && progressDialog.isShowing() )
{
progressDialog.dismiss();
}
if( MyProgressDialog.getInstance()!= null){
MyProgressDialog.destroyInstance();
}
}
答案 3 :(得分:-1)
如果您不关心轮换,可以创建自己的代码来管理:
明显改变:
<activity android:name=".MainActivity" android:label="@string/app_name"
android:configChanges="orientation">