如何解决通过单击按钮两次足够快来绕过模式Android对话框?
| 假设我们有两个按钮,每个按钮都有一个OnClickListener。每个侦听器都显示一个ProgressDialog并进行一些后台工作。 (在幕后是一个AsyncTask,该对话框在onPreExecute中打开。我认为这并不重要,仅作记录...)。假设有一条规则说,在任何给定时间最多只能有一个后台工作者处于活动状态。 我的假设是对话框阻止两个后台工作程序同时运行。我认为模式对话框会阻塞UI,并且在调用对话框的show()方法后无法单击另一个按钮。我错了。 如果您足够快地单击按钮,则可以(几乎)同时触发两个后台工作人员。日志显示,尽管有对话框,也可以在150毫秒的时间内单击两个按钮: 04-14 18:34:04.390:调试/ greenrobot(1860):点击:2131034112 04-14 18:34:04.470:调试/ greenrobot(1860):doInBackground2:2131034112 04-14 18:34:04.540:调试/ greenrobot(1860):单击:2131034113 04-14 18:34:04.570:调试/ greenrobot(1860):doInBackground2:2131034113 对话框代码如下所示:progressDialog = new ProgressDialog(currentActivity);
progressDialog.setMessage(msg);
progressDialog.show();
我错过了什么?我希望我错过了一些真正愚蠢的事情,因为如果没有,我想不出一个很好的解决方案来防止单击后的UI交互。同步后台工作程序不是解决方案,因为UI和方案更加复杂。
解决方法
单击按钮后将其禁用,直到可以再次安全单击为止。
show()
是异步的。调用show()
时,对话框不会立即出现。稍后会发生。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。