2010-07-28 5 views
2

У меня возникли проблемы с диалоговыми окнами прогресса. Я использую диалог управляемый прогресс, чтобы показать пользователю, что операция осуществляется с помощью следующего кода, написанного в функции onCreateDialog (интермедиат идентификатор):Изменен диалог и ориентация прогресса

  case PROGRESS_DIALOG : 
      { 
       dialog = new ProgressDialog(this);          
       dialog.setMessage(getResources().getString(R.string.eStrUpdating)); 
       dialog.setCancelable(true); 
       dialog.setOnCancelListener(new DialogInterface.OnCancelListener() 
       { 
        public void onCancel(DialogInterface dialogInterface) 
        { 
         Log.i(TAG,"progress dialog cancelled "); 
        } 
       }); 
       return dialog; 
      } 

Когда операция завершена, я называю dismissDialog (PROGRESS_DIALOG). Проблема в том, что если я поворачиваю телефон во время отображения диалогового окна выполнения, тогда, когда операция завершается, увольнение не имеет эффекта, и прогресс показывается. И это я не могу понять, почему.

ответ

5

При повороте телефона активность уничтожается и воссоздается. Затем вы должны вызвать увольнение в своем диалоговом окне, в методе onDestroy вашей деятельности и воссоздать его.

+1

Ну, дело в том, что диалог управляется действием, и действие должно обрабатывать такие вещи, как увольнение, когда действие уничтожается и показывается, когда оно создано/возобновлено. –

+0

Я думаю, что увольнение не имеет никакого эффекта, потому что, когда вы вращаетесь, как я уже сказал, создается новый экземпляр Activity, поэтому я также предполагаю новый диалог. так что, возможно, вы пытаетесь сделать увольнение в предыдущем диалоговом окне? – Sephy

2

Я согласен с приведенным выше ответом. Когда ваша ориентация меняется, ваша деятельность уничтожается и воссоздается.

Мой опыт с изменением ориентации является:

  • диалог моего автоматически не получает распущен, но это, кажется, визуально исчезнуть точно так же
  • Я утверждаю переменный экземпляр (возможно утечки?) для диалогового окна в действии и проверьте для нуль, чтобы увидеть, показывает ли диалог как в onDestroy, так и в onSaveInstanceState
  • я закрыть диалоговое окно в OnDestroy
  • Я реализовать DialogInterface.onDismissListener так я могу видеть, когда диалог уволен (возможно, по запросу пользователя)
  • Я пишу булево в onSaveInstanceState (булево указывает диалог показывал)
  • в OnCreate своей деятельности, я смотрю на это логическое значение в пучке и вызов ShowDialog снова

НТН.

Смежные вопросы