Android: how to disable controls during progress bar is active

cor picture cor · Sep 6, 2012 · Viewed 20.9k times · Source

I show my infinte progress bar in the action bar "as usual":

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

and the real work is done in a background thread (AsyncTask)

The problem: all controls on the UI are enabled, so the user can continue to modify the underlying data before the long lasting process is finished.

Simply disabling all controls is not possible because when disabling an EditText, also the keyboard is closed automatically by Android.

Any ideas how to prevent user input during the background work?

Thanks,

Chris

Answer

Chris picture Chris · Sep 1, 2014

What you can do is to bring up an invisible dialog and prevent it from being cancellable. It will show whatever is underneath it but disable all underlying user interaction. Then once you are done with your business you simply dismiss it and go on with your life:

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();