2016-03-07 146 views
0

我在我的活动的onCreate()中有一个alertDialog,它设置活动的某些属性。OnCreate对话框和屏幕旋转

public class MyActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.myactivity); 

     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
     alertDialogBuilder.setTitle("My Dialog"); 
     alertDialogBuilder 
      .setCancelable(false) 
      ... 

     AlertDialog alertDialog = alertDialogBuilder.create(); 
     alertDialog.show(); 
    } 
} 

当我开始活动时,对话框会启动,并在提交对话框后设置属性并关闭对话框。到现在为止还挺好。但是,如果此时(在提交/解除对话框之后),我旋转设备/屏幕,再次调用onCreate(),并再次打开对话框(我不想)。

如何防止在屏幕旋转中打开对话框?或者我应该在其他地方创建对话框(而不是在activity的onCreate()中)?

回答

2

您的问题被称为每次旋转屏幕时间onCreateMethod可以覆盖onSaveInstanceState方法来保存当前布局的实例现在

boolean isSubmited=false; 
public void onSaveInstanceState(Bundle savedInstanceState) { 
// Save the user's current game state 
savedInstanceState.putBoolean(isSubmited, true); 


// Always call the superclass so it can save the view hierarchy state 
super.onSaveInstanceState(savedInstanceState); 
} 

当您提交的对话框中,更改isSubmited为true然后键入

if(isSubmited) 
alertDialog.show(); 

参考http://developer.android.com/training/basics/activity-lifecycle/recreating.html

+0

非常感谢解决方案。语法略有不同,所以我在下面发布了我的实现。 – user1583209

0

基于罗勒Battikhi的SOLUT离子我结束了以下工作:

@Override 
protected void onSaveInstanceState(Bundle savedInstanceState) { 
    // save whether dialog has been submitted 
    savedInstanceState.putBoolean("isSubmitted", isSubmitted); 

    super.onSaveInstanceState(savedInstanceState); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (alertDialog != null) { 
     alertDialog.dismiss(); // prevent window leak when screen is rotated while dialog shown 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // check whether activity is recreated or created for the first time 
    if(savedInstanceState != null) { 
     // recover information on whether dialog was submitted 
     isSubmitted = savedInstanceState.getBoolean("isSubmitted"); 
    } 

    alertDialogBuilder.setPositiveButton("Start", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
       ... 
       isSubmitted=true; 
       })} 

    if (!isSubmitted) { 
     alertDialog.show(); 
    }