/ / Empêcher ProgressDialog d'être fermé lorsque je clique sur le bouton de recherche (Android) - android, dialog, progressdialog

Empêcher que ProgressDialog soit congédié lorsque je clique sur le bouton de recherche (Android) - Android, dialogue, progressdialog

Dans une opération de longue durée, j'affiche une boîte de dialogue contextuelle (créée à partir de ProgressDialog pour empêcher d'autres opérations de se produire).

Je l'ai rendu non annulable avec setCancelable(false), donc je ne peux pas le fermer en utilisant le bouton de retour, mais étonnamment, le bouton de matériel de recherche ferme la boîte de dialogue!

Plus exactement, l'application de recherche globale s'affiche, et lorsque je reviens sur mon application, la boîte de dialogue a été fermée.

Avez-vous une idée de la façon d'empêcher le dialogue d'être ignoré?

Réponses:

45 pour la réponse № 1

Cela fonctionne (remarquez que je l'ai mis sur le constructeur de la boîte de dialogue):

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

Il est peut-être même possible de saisir les pressions positives et négatives sur les boutons, et seulement manipulez-les, retournez true pour toutes les autres clés. Je serais curieux de savoir si vous pouviez comprendre cela ...

PS: J'ai lu quelque part qu'il y avait plus de "trous" dans la boîte de dialogue, c'est-à-dire que vous pouvez vous en débarrasser sans appuyer sur aucun bouton. C'était apparemment un. Quelqu'un en connaît-il d'autres?


35 pour la réponse № 2
setCanceledOnTouchOutside(false);

3 pour la réponse № 3

mProgressDialog.setCancelable(false); a travaillé pour moi.


1 pour la réponse № 4

Vous devez créer vos dialogues via les activités onCreateDialog événement, car c'est le point où ils sont gérés par l'activité et ils seront restaurés lorsque l'activité reprendra.

Rappel pour créer des boîtes de dialogue qui sont gérées (enregistrées et restaurées) pour vous par l'activité. Si tu utilises showDialog(int), l'activité fera appel à cette méthodela première fois, et s'y accrocher par la suite. Toute boîte de dialogue créée par cette méthode sera automatiquement enregistrée et restaurée pour vous, y compris si elle s'affiche. Si vous souhaitez que l'activité gère les boîtes de dialogue d'enregistrement et de restauration à votre place, vous devez remplacer cette méthode et gérer tous les ID transmis à showDialog (int). Si vous souhaitez avoir la possibilité de préparer votre boîte de dialogue avant qu'elle ne s'affiche, 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);
}
}