Подтвердить что ты не робот

Как работать с изменением ориентации с показом ProgressDialog?

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

Как я могу продолжать показывать ProgressDialog после изменения ориентации? Или, может быть, как я могу отключить изменение ориентации после того, как пользователь попросит отправить свою регистрацию?

4b9b3361

Ответ 1

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

Ответ 2

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

в начале:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

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

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

Ответ 3

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

Например: pause-and-resume-asynctasks-android и what-to-do-with-asynctask-in-onpause.

Ответ 4

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

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

Ответ 5

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

android:configChanges="orientation" 

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

Далее работает нормально

<activity android:name=".MyActivity" 
          android:configChanges="orientation|screenSize|screenLayout">
</activity>

Ответ 6

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

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