14

我“像往常一样”在操作栏中显示我的无限进度条:

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

真正的工作是在后台线程(AsyncTask)中完成的

问题:UI上的所有控件都已启用,因此用户可以在长时间的过程完成之前继续修改底层数据。

简单地禁用所有控件是不可能的,因为禁用 EditText 时,Android 也会自动关闭键盘。

任何想法如何在后台工作期间防止用户输入?

谢谢,

克里斯

4

4 回答 4

9

您可以做的是调出一个不可见的对话框并防止它被取消。它将显示其下方的任何内容,但会禁用所有底层用户交互。然后,一旦您完成了您的业务,您只需将其解雇并继续您的生活:

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();  
于 2014-09-01T08:20:48.763 回答
5

试着把progressDialog.setcancelable(false);

于 2012-09-06T13:11:15.633 回答
2

您正在尝试仅设置 Activity 的属性。而是使用 ProgressDialog 调出一个对话框,这样 Ui 将无法访问

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

编辑:如果您不想使用 ProgressDialog,请获取根布局并调用

layout.setEnabled(false)
于 2012-09-06T13:15:02.717 回答
1

万一,如果其他人面临同样的问题,

禁用编辑文本使用:EditText.setFocusable(false);

启用编辑:EditText.setFocusableInTouchMode(true);

于 2014-10-01T21:28:14.007 回答