web-dev-qa-db-ja.com

検索ボタンをクリックしたときにProgressDialogが閉じられないようにする(Android)

長時間実行される操作で、ポップアップダイアログを表示しています(他の操作が発生しないようにProgressDialogから作成されます)。

setCancelable(false)でキャンセルできないようにしたので、戻るボタンを使用して閉じることはできませんが、驚くべきことに、ハードウェアの検索ボタンでダイアログが閉じます。

より正確には、グローバル検索アプリケーションが表示され、アプリに戻ると、ダイアログが閉じられています。

ダイアログが閉じられないようにする方法はありますか?

41

これは機能します(ダイアログビルダーに配置したことに注意してください):

.setOnKeyListener(new DialogInterface.OnKeyListener() {

    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
            return true; // Pretend we processed it
        }
        return false; // Any other keys are still processed as normal
    }
})

たぶん、正と負のボタンの押下をつかむことさえ可能であり、のみこれらを処理し、他のすべてのキーに対してtrueを返します。あなたがそれを理解することができれば興味があります...

PS:ダイアログにはもっと「穴」があるところを読んだ。つまり、ボタンを押さなくてもそれを取り除くことができる。これは明らかに1つでした。誰か他の人を知っていますか?

45
QQQuestions
setCanceledOnTouchOutside(false);
35
John Ding

mProgressDialog.setCancelable(false);は私のために働いた。

4
Jonas Borggren

ダイアログは、アクティビティの onCreateDialog イベントを介して作成する必要があります。これは、ダイアログがアクティビティによって管理され、アクティビティが再開されたときに復元されるためです。

アクティビティによって管理(保存および復元)されるダイアログを作成するためのコールバック。 showDialog(int)を使用すると、アクティビティは最初にこのメソッドを呼び出し、その後はこのメソッドにハングアップします。この方法で作成されたダイアログは、表示されているかどうかを含め、自動的に保存および復元されます。アクティビティで保存ダイアログと復元ダイアログを管理する場合は、このメソッドをオーバーライドして、showDialog(int)に渡されるIDを処理する必要があります。ダイアログが表示される前にダイアログを準備する機会が必要な場合は、onPrepareDialog(int, Dialog)をオーバーライドします。

使用例:

public class MyClass extends Activity {
// ........ //
static final int DATE_DIALOG_ID = 1;
@Override
 protected Dialog onCreateDialog(int id) {
  switch (id) {

  case DATE_DIALOG_ID:
   return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
     mDay);
  }
  return null;
 }

    public void launchSetDate() {
  showDialog(DATE_DIALOG_ID);
 }
}
1
Pentium10