Android: спиннер Progress Dialog не вращается - PullRequest
13 голосов
/ 25 июня 2010

Похоже, что это проблема для Android, которую вы можете увидеть в демонстрациях API в Views -> Progress Bar -> Dialogs.

Обычно, если вы показываете диалог прогресса, он работает, как и ожидалось, в первый раз. Если вы отклоните его и покажете снова (не разрушая действия или что-то в этом роде), вращающееся изображение перестает вращаться. В демонстрации API вы можете увидеть это, нажав «Показать неопределенный», нажав назад, чтобы закрыть диалоговое окно, и снова нажав кнопку.

Я пытался создать свой собственный диалог прогресса, однако он показывает ту же проблему, что и проблема с вращающимся изображением "ProgressBar".

Мне интересно, есть ли у кого-нибудь решение этой проблемы.

Ответы [ 5 ]

25 голосов
/ 25 июня 2010

Если вы отклоните Dialog, вы не должны снова показывать тот же экземпляр. Либо создайте новый, либо используйте hide() вместо dismiss(). При использовании hide() вам все равно придется dismiss(), когда он больше не нужен.

4 голосов
/ 25 января 2011

Я искал тот же ответ, однако ни один из ответов здесь не работал для меня, потому что я хотел использовать методы диалога Деятельности, такие как Activity.showDialog(), поэтому мне не пришлось управлять ими самостоятельно, а также, чтобы они автоматическивоссоздается при вращении.

Как и в некоторых других ответах, если dismiss () вызывается для ProgressDialog, он прекращает вращаться.Activity.onCreateDialog() сохраняет ссылку на диалог, поэтому после его создания он не будет воссоздан при следующем вызове Activity.showDialog().Он просто вызовет Activity.onPrepareDialog() и будет использовать уже существующий экземпляр.Если он был отклонен, он не будет вращаться при повторном показе.

Вы можете заставить его воссоздать себя, если вы позвоните Activity.removeDialog() с идентификатором ProgressDialog вместо вызова Dialog.dismiss().Это отклонит его, а также удалит эту ссылку, поэтому, когда Activity.onShowDialog() вызывается следующим, он будет использовать Activity.onCreateDialog() вместо только Activity.onPrepareDialog() и создаст новый (и вращающийся) экземпляр.

Убедитесь, что выЕсли у вас есть ProgressDialog, который можно отменить или отменить, вы установите слушателя, чтобы вы могли позвонить Activity.removeDialog().В противном случае он будет только уволен.Вы также можете позвонить прямо перед тем, как позвонить Activity.showDialog().

Надеюсь, это кому-нибудь поможет.

3 голосов
/ 25 июня 2010

Вам не нужно использовать onCreateDialog для ProgressDialog объектов, как описано здесь http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog.Вы должны создать и показать диалог прогресса в основном коде вместо использования showDialog и onCreateDialog.

1 голос
/ 17 декабря 2011

Вы можете определить класс и реализовать AsyncTask. Здесь вы определяете фоновые процессы в методе doinbackground () следующим образом.

 @Override
   protected String doInBackground(String... params) {
   publishProgress(new Integer(1));
   for(int i=0;i<=300;i++){
System.out.println(i);
}
publishProgress(new Integer(1));
for(int i=301;i<=600;i++){
System.out.println(i);
}
 .................
 ....................
 ...........................
 //your background tasks
publishProgress(new Integer(1));
for(int i=601;i<=900;i++){
System.out.println(i);
}
pd.dismiss();//dismiss the progress dialog here...
return null;
}

Вы также можете показать информацию о своем прогрессе с помощью метода onProgressUpdate (). Проверьте полное простое учебное пособие по адресу http://www.androidcookers.co.cc/2011/12/want-to-run-progress-dialog-in-android.html

1 голос
/ 17 октября 2010

Вы можете объявить экземпляр ProgressDialog в своей активности и переопределить onCreateDialog(int). Тогда вместо того, чтобы позвонить на showDialog(int), вы просто назначаете свой экземпляр ProgressDialog на onCreateDialog(int), где вы будете звонить dialog.show().

public class Home extends Activity {

ProgressDialog recordingDialog;

//where you want to call the dialog
recordingDialog = (ProgressDialog)onCreateDialog(RECORDING_DIALOG_KEY);


@Override
protected Dialog onCreateDialog(int id) {
    ProgressDialog dialog = new ProgressDialog(this);

    switch (id) {
    case RECORDING_DIALOG_KEY:
        ((ProgressDialog) dialog).setIndeterminate(true);
        dialog.setCancelable(false);
        ((ProgressDialog) dialog)
                .setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setMessage("Recording...");
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Stop",
                dialogStopListener);

        dialog.show();

        break;
    default:
        dialog = null;
    }
    return dialog;
}
}
...