2010-09-12 6 views
17

Estoy mostrando un ProgressDialog en el método onPreExecute de un objeto AsyncTask y cancelando el ProgressDialog en el método onPostExecute. En el método doInBackground estoy haciendo una solicitud HTTP para el registro de usuario. Deseo permitir cambios en la orientación de la pantalla. Cuando cambio la orientación mientras el método doInBackground aún se está ejecutando, recibo todo tipo de errores divertidos como 'IllegalArgumentException: View no conectado al administrador de ventanas' y 'RegisterScreen ha filtrado la ventana ...'¿Cómo lidiar con el cambio de orientación con un ProgressDialog que muestra?

¿Cómo puedo continuar correctamente? para mostrar el ProgressDialog después de un cambio de orientación? O tal vez, ¿cómo puedo desactivar el cambio de orientación después de que el usuario solicite enviar su registro?

+0

[Aquí está la respuesta] [1] Creo que esa es la solución que busca. [1]: http://stackoverflow.com/a/3821998/1665247 – dvrm

Respuesta

15

Intente agregar este atributo android:configChanges="orientation" a su elemento Activity en el archivo AndroidManifest.xml.

+0

esto lo hizo! tonto de mí, debería haber sabido que esta era la solución. – binnyb

+8

Tuve que agregar "screenSize" a esto para apuntar a nivel de API 13 y superior. De lo contrario, no funciona para esos entornos. android: configChanges = "orientation | screenSize" – notmystyle

+0

Gracias por la sugerencia screenSize! Tenía "orientación | teclado" y de repente ya no funcionaba. Esto funciona perfectamente, gracias! – TSGames

6

Puede intentar deshabilitar los cambios de orientación durante el tiempo que muestre el ProgressDialog.

a principios do:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 

y permitir volver después de la finalización:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

Espero que esto ayude.

(Si alguien tiene una solución adecuada, me gustaría que le interesen también :-)

+2

El problema no es cambiar la orientación. Está viendo estos problemas debido al ciclo de vida de la actividad, que destruye y recrea su actividad. La prevención de los cambios de orientación evitará esta instancia particular del ciclo de vida, pero el mismo problema surgirá cuando el usuario presione 'Inicio' durante el registro de progreso y regrese. Su actividad debe estar diseñada para cerrar y reiniciar en cualquier momento. – Josh

+0

¿Qué pasa si mi AsyncTask no está en mi actividad ... Está en otro archivo de clase común para muchas clases de actividades. Entonces, ¿cómo puedo obtener setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); – Debopam

+0

Genial, pero para bloquear la orientación ActivityInfo.SCREEN_ORIENTATION_LOCKED funciona mejor para mí, especialmente en el paisaje. – BlueHazard

-1

Se puede utilizar el siguiente código en su Manifiesto

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

Añadir esta etiqueta en la actividad en manifest.xml aplicación

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

1

En mi caso he utilizado

android:configChanges="orientation" 

pero no funcionó para mí

Siguiendo está trabajando bien

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