0

我有一个按钮可以启动后台线程来做一些工作,我正在尝试使用 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().
  }
}
4

2 回答 2

1

不。

问题是您在单击事件传递之前单击了多次。(即它在你运行之前排队ProgressDialog.show()。)

于 2012-05-22T14:36:27.933 回答
1

从我在 Android 中注意到的情况来看,您可以快速双击一个按钮并让 onClick 侦听器触发两次(甚至更多),而不管侦听器中的代码如何(即使您立即禁用该按钮)。

不久前我在这里报告了一个错误:http ://code.google.com/p/android/issues/detail?id=20073但当然这些事情往往会被谷歌“忽视”。随意加注星标,希望能引起 Google 的注意

于 2012-05-22T14:40:57.763 回答