2012-09-06 14 views
13

muestro mi barra de progreso infinte en la barra de acción "como de costumbre":Android: cómo desactivar los controles durante barra de progreso está activo

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
... 
setProgressBarIndeterminateVisibility(true); 
... 
setProgressBarIndeterminateVisibility(false); 

y el trabajo real se realiza en un subproceso de fondo (AsyncTask)

El problema: todos los controles en la interfaz de usuario están habilitados, por lo que el usuario puede continuar modificando los datos subyacentes antes de que termine el proceso de larga duración.

Simplemente deshabilitar todos los controles no es posible porque al deshabilitar un EditText, también el teclado se cierra automáticamente por Android.

Alguna idea de cómo evitar la entrada del usuario durante el trabajo en segundo plano?

Gracias,

Chris

Respuesta

4

trate de poner progressDialog.setcancelable(false);

+0

que no tengo ProgressBar (véase más arriba) – cor

+0

¿Cómo va a mostrar al usuario que está haciendo algo se hubiera metido en el fondo y no quieres que cualquier usuario pueda tocar anythng ..... la mejor manera es utilizar el progresodialog que muestra la carga en la pantalla .... –

+1

mi fragmento de código anterior ya muestra un círculo de progreso infinito en la esquina derecha de la barra de acciones – cor

2

Usted está tratando de establecer sólo la propiedad de actividad. En su lugar mostrará un diálogo utilizando ProgressDialog, por lo que la IU no será accesible

ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", true); 

Editar: Si no desea utilizar ProgressDialog, obtener el diseño raíz y llame

layout.setEnabled(false) 
+0

Conozco el ProgressBar pero no quiero usarlo en este caso. – cor

+0

¿Quiere que todo el diseño se atenúe? – nandeesh

+0

atenuado o al menos "de solo lectura" (= no se puede modificar el control, no se presionó ningún botón, ....) – cor

6

Lo que puede hacer es abrir un cuadro de diálogo invisible y evitar que se cancele. Mostrará lo que está debajo pero deshabilitará toda interacción subyacente del usuario. Luego, una vez que haya terminado con su negocio simplemente descartarlo y seguir con su vida:

Dialog mOverlayDialog = new Dialog(mContext, android.R.style.Theme_Panel); //display an invisible overlay dialog to prevent user interaction and pressing back 
mOverlayDialog.setCancelable(false); 
mOverlayDialog.show(); 
+0

la solución más fácil –

1

en caso de que, si alguien se enfrentó al mismo problema,

para desactivar la edición de la utilización de texto: EditText.setFocusable(false);

para permitir la edición: EditText.setFocusableInTouchMode(true);