42 votes

Empêcher le renvoi de ProgressDialog lorsque je clique sur le bouton de recherche (Android)

Dans une opération de longue durée, je vous montre une boîte de dialogue contextuelle (créé à partir d' ProgressDialog afin de prévenir d'autres opérations de passe).

J'ai fait de la non-résiliable avec setCancelable(false), donc je ne peux pas fermer à l'aide du bouton de retour, mais, étonnamment, la Recherche de matériel de bouton rejette le dialogue!

Plus exactement, la recherche globale de l'application s'affiche, et quand je reviens à mon application, la boîte de dialogue a été rejeté.

Aucune idée de la façon de prévenir la boîte de dialogue d'être rejeté?

45voto

QQQuestions Points 611

Cela fonctionne (notez que je l'ai mis sur le générateur 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
    }
})
 

Peut-être qu'il est même possible de saisir les pressions de bouton positives et négatives, et de ne les gérer que , de retourner à true pour les autres clés. 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 dialogue, c'est-à-dire que vous pouvez vous en débarrasser sans appuyer sur un bouton. C'était apparemment un. Est-ce que quelqu'un en connaît d'autres?

37voto

John Ding Points 463
setCanceledOnTouchOutside(false);

1voto

Pentium10 Points 68884

Vous devez créer vos boîtes de dialogue par l'Activité de l' onCreateDialog événement, comme c'est le point où ils sont gérés par l'Activité, et ils seront restitués lors de la reprise de l'activité.

Rappel pour la création de boîtes de dialogue qui sont gérés (sauvé et restauré) pour vous par l'activité. Si vous utilisez showDialog(int), l'activité d'appel par le biais de cette méthode, la première fois, et l'accrocher sur elle par la suite. Toute boîte de dialogue qui est créé par cette méthode sera automatiquement sauvegardé et restauré pour vous, y compris si elle est à l'affiche. Si vous souhaitez l'activité pour gérer la sauvegarde et la restauration des boîtes de dialogue pour vous, vous devez remplacer cette méthode et gérer les id qui sont passés à showDialog(int). Si vous souhaitez une occasion de préparer votre boîte de dialogue avant qu'il est indiqué, substituer 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);
 }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X