我有一个按钮可以启动后台线程来做一些工作,我正在尝试使用 ProgressDialog 来防止用户在完成该工作时双击该按钮(或任何其他 ui 元素)。我在按钮 onClick 代码中做的第一件事是显示进度对话框,它接管了屏幕。我看到的问题是,如果我快速点击此按钮,有时会在显示 ProgressDialog 之前注册两次或多次按下。这使我假设 ProgressDialog.show() 在 ProgressDialog 实际可见之前返回。
有人可以证实这一点吗?另外,有没有办法改变这种行为,或者至少得到对话框何时真正可见的通知?我看到了 Dialog.onStart() 但鉴于 javadoc,这似乎是在 Dialog 实际可见之前调用的......
更新:虽然一般来说似乎没有解决这个问题的好方法,但以下适用于我的工作是由外部线程完成的情况,并且要做的工作量比所有要处理的按钮点击:
void myOnClickHandler() {
if(myButton.isEnabled()) {
myButton.setEnabled(False);
// do work here
// setEnabled(true) is invoked at the end of my spawned thread's run().
}
}