Android:如何在进度条活动期间禁用控件

14

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

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

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

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

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

有什么想法可以防止用户在后台工作期间输入?

谢谢,

Chris

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

5

尝试将 progressDialog.setcancelable(false); 放置在代码中。


我没有进度条(请参见上文) - cor
1
我的代码片段已经在操作栏右侧显示了一个无限进度圆形。 - cor
将父视图的可点击属性设置为false...我认为这可以帮助你...我不明白为什么你要避免使用进度对话框? - Aditya Nikhade
clickable == false不能阻止编辑EditText中的一些文本。 - cor
避免使用进度对话框: - cor
显示剩余3条评论

2

您正在尝试设置Activity的属性。相反,使用ProgressDialog弹出对话框,这样UI将不可访问。

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

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

layout.setEnabled(false)

我知道进度条,但在这种情况下不想使用它。 - cor
你想让整个布局变暗吗? - nandeesh
变暗或至少为“只读”(=不能修改任何控件,不能按下任何按钮...) - cor
1
layout.setEnabled(false) 不会阻止在 EditText 中编辑文本。 - cor
使用进度对话框而不是进度条,您是完全正确的。该对话框将保持屏幕的焦点,防止任何用户活动到达下面的 Activity。但是,layout.setEnabled(false) 不会向其子元素传播,因此该解决方案不可行。 - SMBiggs

1

如果有人遇到相同的问题,可以使用以下方法禁用文本编辑:EditText.setFocusable(false);

要启用编辑,请使用以下代码:EditText.setFocusableInTouchMode(true);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接