0

いくつかの作業を行うためにバックグラウンドスレッドを開始するボタンがあり、ProgressDialogを使用して、その作業の実行中にユーザーがそのボタン(またはその他のUI要素)をダブルクリックしないようにしようとしています。ボタンonClickコードで最初に行うことは、画面を引き継ぐ進行状況ダイアログを表示することです。私が見ている問題は、このボタンをすばやくタップすると、ProgressDialogが表示される前に2回以上押すと登録されることがあるということです。これにより、ProgressDialogが実際に表示される前にProgressDialog.show()が返されていると思います。

誰かがこれを確認できますか?また、この動作を変更する方法、または少なくともダイアログが実際に表示されたときに通知を受け取る方法はありますか?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 リスナーを 2 回 (またはそれ以上) 起動させることができます。

少し前にここでバグを報告しました: http://code.google.com/p/android/issues/detail?id=20073しかし、もちろん、これらのことは Google によって「気付かれない」傾向があります。Google の注目を集めることを期待して、気軽にスターを付けてください

于 2012-05-22T14:40:57.763 に答える