Как бороться с изменением ориентации с показом ProgressDialog? - PullRequest
17 голосов
/ 12 сентября 2010

Я показываю ProgressDialog в методе onPreExecute объекта AsyncTask и отменяю ProgressDialog в методе onPostExecute.В методе doInBackground я делаю HTTP-запрос на регистрацию пользователя.Я хочу разрешить изменение ориентации экрана.Когда я меняю ориентацию, пока метод doInBackground все еще работает, я получаю всевозможные забавные ошибки, такие как «IllegalArgumentException: представление не привязано к диспетчеру окон» и «RegisterScreen пропустил окно ...»могу ли я правильно продолжать показывать ProgressDialog после изменения ориентации?Или, может быть, как я могу отключить изменение ориентации после того, как пользователь просит отправить свою регистрацию?

Ответы [ 6 ]

15 голосов
/ 13 сентября 2010

Попробуйте добавить этот атрибут android:configChanges="orientation" в элемент Activity в файле AndroidManifest.xml.

6 голосов
/ 12 сентября 2010

Вы можете попытаться отключить изменения ориентации во время показа ProgressDialog.

в начале:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

и включить обратно после завершения:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

Надеюсь, это поможет.

(Если у кого-то есть правильное решение, мне также будет интересно: -)

4 голосов
/ 13 сентября 2010

Вы хотите правильно обрабатывать жизненный цикл активности, что означает сохранение и восстановление состояния вашей активности, а не попытки предотвратить изменения жизненного цикла. Прочитайте статью об AsyncTask и жизненном цикле активности.

Например: pause-and-resume-asynctasks-android и что делать с asynctask-in-pause .

2 голосов
/ 14 июня 2013

Добавьте это в тег активности в файле manifest.xml

приложения.

<activity android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:name=".your.package"/>

1 голос
/ 18 марта 2014

В моем случае я использовал

android:configChanges="orientation" 

, но у меня это не сработало

Следующее работает нормально

<activity android:name=".MyActivity" 
          android:configChanges="orientation|screenSize|screenLayout">
</activity>
0 голосов
/ 30 сентября 2011

Вы можете использовать следующий код в своем манифесте

<activity android:label="@string/app_name" 
        android:configChanges="orientation|keyboardHidden" 
        android:name=".your.package">
...