2016-03-07 76 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(); 
    }