2016-03-07 4 views
0

У меня есть alertDialog в onCreate() моей активности, которая устанавливает определенные свойства активности.Диалог 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() снова вызывается, и диалог открывается снова (чего я не хочу).

Как предотвратить открытие диалога при вращении экрана? Или мне нужно создать диалог где-нибудь еще (а не в 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 к истинно, то тип

if(isSubmited) 
alertDialog.show(); 

ссылка http://developer.android.com/training/basics/activity-lifecycle/recreating.html

+0

Большое спасибо за решение. Синтаксис немного отличается, поэтому я опубликовал свою реализацию ниже. – user1583209

0

на основе Solut Василия Battikhi в иона Я закончил делать следующее:

@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(); 
    }