Empêcher ProgressDialog d’être rejeté lorsque je clique sur le bouton de recherche (Android)

Dans une opération de longue durée, je montre une boîte de dialog contextuelle (créée à partir de ProgressDialog pour empêcher d’autres opérations).

Je l’ai rendu non setCancelable(false) avec setCancelable(false) , donc je ne peux pas le fermer en utilisant le bouton retour, mais étonnamment, le bouton Rechercher du matériel supprime la boîte de dialog!

Plus précisément, l’application de recherche globale s’affiche et lorsque je reviens à mon application, la boîte de dialog a été supprimée.

Une idée sur comment empêcher le dialog d’être rejeté?

Cela fonctionne (remarquez que je l’ai mis sur le générateur de dialog):

 .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 } }) 

Peut-être est-il même possible de saisir les touches positives et négatives des boutons, et de ne les traiter que , renvoyer true pour les autres touches. Serait curieux si vous pouvez comprendre cela …

PS: J’ai lu quelque part qu’il y a plus de “trous” dans la boîte de dialog, c’est-à-dire que vous pouvez vous en débarrasser sans toucher à aucun bouton. C’était apparemment un. Est-ce que quelqu’un connaît d’autres?

 setCanceledOnTouchOutside(false); 

mProgressDialog.setCancelable(false); travaillé pour moi

Vous devez créer vos boîtes de dialog via l’événement onCreateDialog de l’ activité, car c’est le point où elles sont gérées par l’activité et elles seront restaurées à la reprise de l’activité.

Rappel pour la création de boîtes de dialog gérées (enregistrées et restaurées) pour vous par l’activité. Si vous utilisez showDialog(int) , l’activité appellera cette méthode pour la première fois et s’y accrochera par la suite. Toute boîte de dialog créée par cette méthode sera automatiquement enregistrée et restaurée pour vous, y compris si elle est affichée. Si vous souhaitez que l’activité gère les boîtes de dialog d’enregistrement et de restauration pour vous, vous devez remplacer cette méthode et gérer tous les identifiants transmis à showDialog (int). Si vous souhaitez avoir la possibilité de préparer votre boîte de dialog avant qu’elle ne soit affichée, remplacez onPrepareDialog(int, Dialog) .

Exemple d’utilisation:

 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); } }