Dialog.show()是一种非阻塞方法吗?

时间:2012-05-22 14:31:39

标签: java android

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

2 个答案:

答案 0 :(得分:1)

没有

问题是您在点击事件发布之前多次点击。 (即在您运行ProgressDialog.show()之前它已排队。)

答案 1 :(得分:1)

从我在Android中注意到,您可以快速双击按钮并使onClick侦听器触发两次(甚至更多),无论侦听器中的代码如何(即使您立即禁用该按钮)。

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