Frage

ich eine ProgressDialog in onCreateDialog() erstellen wie folgt:

protected Dialog onCreateDialog(int id) {
  if (id == DIALOG_PROGRESS_ID)
  {
      ProgressDialog dialog = new ProgressDialog(this);
      dialog.setMessage(getResources().getString(R.string.MyLabel));
      dialog.setCancelable(false);
      dialog.setIndeterminate(true);
      return dialog;
  }
}

Android, in seiner Weisheit (oder gravierender Mangel davon) entscheidet über onCreateDialog () erstellt jeden Dialog zwischenzuspeichern. Dieser Grund, jeder nachfolgender Aufruf von showDialog(DIALOG_PROGRESS_ID) Ergebnissen in der gleichen ProgressDialog Instanz verwendet wird, aber die Animation funktioniert nicht mehr.

Ich habe wieder Satz unbestimmt in onPrepareDialog() versucht, aber das macht nichts. Ebenso gibt es keine offensichtliche Methode, um Anruf auf der Dialoginstanz, die die Animation zurückgesetzt wird.

protected void onPrepareDialog(int id, Dialog dialog)
{
  //This doesn't do anything
  if (id == DIALOG_PROGRESS_ID)
     ((ProgressDialog)dialog).setIndeterminate(true);
  super.onPrepareDialog(id, dialog);
}

EDIT: Aber vielleicht gibt es eine Möglichkeit, die ProgressBar selbst zu bekommen und starten Sie es Animieren? so habe ich versucht, die folgende, nachdem ich diese Frage gestellt:

@Override
protected void onPrepareDialog(int id, Dialog dialog)
{
  if (id == DIALOG_PROGRESS_ID)
  {
     ProgressBar p = (ProgressBar) dialog.findViewById(android.R.id.progress);
     if (p.getAnimation() != null)
        p.startAnimation(p.getAnimation());
  }
  super.onPrepareDialog(id, dialog);

}

Aber es hat nicht funktioniert entweder

Also, Wer weiß, ob es eine Möglichkeit zum Neustart Animation auf einem ProgressDialog ist? Wenn nicht, gibt es eine Möglichkeit, dass ich jede showdialog () -Aufruf onCreateDialog anrufen zwingen kann ()? (diese zweite Frage @TuomasR beantwortet wurde, aber nachdem es Grübeln ich glaube nicht, das ist eine sehr gute Lösung für mein Problem)

War es hilfreich?

Lösung

Ha! Verstanden ... wurde auch mit diesen zu kämpfen. Aber Aufruf:

removeDialog(DIALOG_PROGRESS_ID)

unmittelbar nach dem

dismissDialog(...)

entfernt sie aus der (vermuteten) Dialog Cache für die Aktivität und Kräfte ein Aufruf an onCreateDialog. Erstellen Sie ein neues ProgressDialog in onCreateDialog und der Spinner belebt jedes Mal (für mich zumindest).

Andere Tipps

Ich weiß nicht, wie zu removeDialog es auf nächste Aufführung neu zu erstellen. Also, ich dieses Problem beheben, indem Sie onCreateDialog und onPrepareDialog:

1) In onCreateDialog schaffe ich normalerweise die ProgressDialog. 2) In onPrepareDialog I Referenz die progressBar hinein und Kraft neu zu starten:

@Override
protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
    switch (id){

        .....

        case DIALOG_PROGRESS_ID:
            ProgressBar p = (ProgressBar) dialog.findViewById(android.R.id.progress);
            p.setVisibility(View.GONE);
            p.setVisibility(View.VISIBLE);
        break;
    }
}

Nun, eine nicht so kühl Abhilfe würde die Parameter und nicht erklärt, die int privat wie in den Beispielen bearbeiten. Natürlich verlieren Sie die Möglichkeit, Schalter auf onCreateDialog, aber Sie scheinen nicht ohnehin tun, dass zu sein:

showDialog(++DIALOG_PROGRESS_ID);

Natürlich, wenn der Dialog mehrmals angezeigt wird, können Sie Speicherfehler haben. Nicht schön, aber sollte funktionieren.

Sie können auch versuchen.

if (progressDialog != null) {
    progressDialog.dismiss();
    progressDialog = null;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top