Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过点击两次按钮来绕过Android模式对话框是否足够快?_Android_User Interface_Dialog_Modal Dialog_Progressdialog - Fatal编程技术网

通过点击两次按钮来绕过Android模式对话框是否足够快?

通过点击两次按钮来绕过Android模式对话框是否足够快?,android,user-interface,dialog,modal-dialog,progressdialog,Android,User Interface,Dialog,Modal Dialog,Progressdialog,假设我们有两个按钮,每个按钮都有一个OnClickListener。每个侦听器都显示一个ProgressDialog并进行一些后台工作。(幕后是一个异步任务,对话框是在onPreExecute中打开的。我认为这无关紧要,只是为了记录…)。假设有一条规则规定,在任何给定的时间内,最多只能有一名后台工作人员处于活动状态 我的假设是对话框阻止两个后台工作人员同时运行。我认为模态对话框会阻塞UI,在调用对话框的show()方法后,不可能再单击另一个按钮。我错了 如果您足够快地单击按钮,就有可能同时触发两

假设我们有两个按钮,每个按钮都有一个OnClickListener。每个侦听器都显示一个ProgressDialog并进行一些后台工作。(幕后是一个异步任务,对话框是在onPreExecute中打开的。我认为这无关紧要,只是为了记录…)。假设有一条规则规定,在任何给定的时间内,最多只能有一名后台工作人员处于活动状态

我的假设是对话框阻止两个后台工作人员同时运行。我认为模态对话框会阻塞UI,在调用对话框的show()方法后,不可能再单击另一个按钮。我错了

如果您足够快地单击按钮,就有可能同时触发两个后台工作程序(几乎)。日志显示,尽管出现以下对话框,但在150毫秒的时间跨度内仍可以单击两个按钮:

04-14 18:34:04.390: DEBUG/greenrobot(1860): Clicked: 2131034112 04-14 18:34:04.470: DEBUG/greenrobot(1860): doInBackground2: 2131034112 04-14 18:34:04.540: DEBUG/greenrobot(1860): Clicked: 2131034113 04-14 18:34:04.570: DEBUG/greenrobot(1860): doInBackground2: 2131034113
我错过了什么?我希望我错过了一些非常愚蠢的事情,因为如果没有,我想不出一个好的解决方案来阻止点击后的UI交互。同步后台工作人员不是一个解决方案,因为UI和场景更复杂

单击按钮后禁用该按钮,直到可以安全地再次单击为止


show()
是异步的。调用
show()
时,该对话框不会立即出现。稍后会出现此问题。

单击按钮后禁用该按钮,直到可以安全地再次单击为止


show()
是异步的。调用
show()
时,该对话框不会立即出现。过一会儿就会发生。

谢谢。实际的UI比两个按钮的场景复杂得多。有几个屏幕,每个屏幕都有几个视图。我在寻找一个更通用的解决方案。(与此同时,我创建了一个helper类,它禁用了整个视图层次结构并再次启用它,但可能还有更聪明的解决方案?)嗯,没有更好的答案,所以请将您的答案标记为已接受。我制作了自己的通用解决方案,其中包含一个AsyncTask子体,负责在UI运行时自动阻止它。谢谢。实际的UI比两个按钮的场景复杂得多。有几个屏幕,每个屏幕都有几个视图。我在寻找一个更通用的解决方案。(与此同时,我创建了一个helper类,它禁用了整个视图层次结构并再次启用它,但可能还有更聪明的解决方案?)嗯,没有更好的答案,所以请将您的答案标记为已接受。我制作了自己的通用解决方案,其中包含一个AsyncTask子体,负责在UI运行时自动阻止它。
progressDialog = new ProgressDialog(currentActivity);
progressDialog.setMessage(msg);
progressDialog.show();