Frage

In einer lang andauernden Operation, ich bin ein Pop-up-Dialog zeige (von ProgressDialog erstellt anderen Operationen zu verhindern).

Ich habe es nicht kündbaren mit setCancelable(false) gemacht, so dass ich nicht in der Nähe kann die Zurück-Taste verwenden, aber überraschend, entlässt die Suche Hardware, um den Dialog!

Genauer gesagt, wird die globale Suchanwendung angezeigt, und wenn ich meine App zurückkommen, hat der Dialog abgewiesen.

Jede Idee, wie das Dialogfeld zu verhindern, entlassen zu werden?

War es hilfreich?

Lösung

Das funktioniert (man beachte ich legte es auf den Dialog Builder):

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

Vielleicht ist es sogar möglich, die positiven und negativen Drücken von Tasten zu greifen, und nur behandeln diese, return true für alle anderen Tasten. Wäre gespannt, ob du das herausfinden können ...

PS: Ich habe irgendwo gelesen, gibt es mehr „Löcher“ im Dialog, das heißt können Sie es loswerden, ohne es irgendwelche Tasten zu treffen. Dies war offenbar ein. Weiß jemand, der alle anderen?

Andere Tipps

setCanceledOnTouchOutside(false);

mProgressDialog.setCancelable(false); für mich gearbeitet.

Sie haben Ihre Dialoge über die Aktivität erstellen ist onCreateDialog Ereignis, wie das ist der Punkt, an dem sie von der Aktivität verwaltet werden, und sie werden wieder hergestellt werden, wenn die Aktivität wieder aufgenommen wird.

Rückruf für die Erstellung von Dialogen, die verwaltet werden (gespeichert und wiederhergestellt) für Sie durch die Aktivität. Wenn Sie showDialog(int) verwenden, rufen Sie die Aktivität das erste Mal auf dieses Verfahren durch, und danach auf sie hängen. Jeder Dialog, der mit dieser Methode erstellt wird, wird automatisch gespeichert und für Sie wieder hergestellt werden, einschließlich, ob es angezeigt wird. Wenn Sie die Aktivität möchten den Speichern und Wiederherstellen von Dialogen für Sie zu verwalten, sollten Sie diese Methode überschreiben und alle IDs behandeln, die zu showdialog (int) übergeben werden. Wenn Sie die Gelegenheit für Ihren Dialog vorzubereiten, bevor es angezeigt wird, überschreibt onPrepareDialog(int, Dialog).

Beispiel Nutzung:

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);
 }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top