Intereting Posts
Оптимальные примеры изображений для мобильных приложений Управление кодом / сборкой для магазинов приложений Android (Google / Amazon / etc)? Android: отправка SMS через намерение с телом и возвращение назад. Android WebView -> Показать WebArchive Как найти разницу две даты в приложении Android Могу ли я передать объект Javascript в Android WebView? NotifydataSetChanged on Adapter будет обновляться новыми элементами, но не будет обновлять существующие элементы Как я могу всегда показывать Android Studios Preview? Как получить размер изображения, хранящегося в байтовом массиве в KB Проблема с запасом Браузер собирает фотографии из галереи Как изменить значок режима действия библиотеки SherlockActionBar? FirebaseStorage возвращает неизвестную ошибку при запросе изображения Шрифт и цвет списка виджетов Android Как записывать и сохранять в качестве mp3-потокового аудио mp3 Как выбрать и скопировать текст в представлении, которое не связано с деятельностью?

Я хочу прогресс, но получаю spinner progressdialog

Я использую публичную AsynTask для загрузки данных, и я пытаюсь показать индикатор выполнения, который покажет ход загрузки. Я думаю, что у меня есть код, но все, что я получаю, это spinner progressdialog. Я что-то упускаю? Почему не отображается индикатор выполнения? Вот код. Спасибо за любые указатели.

public class FileDownloader extends AsyncTask<String, Integer, Void> { private Context _appContext; private HttpURLConnection _urlConn; private ProgressDialog _progressDia = null; private DialogInterface.OnCancelListener _progDiaCancelListener = new DialogInterface.OnCancelListener() { /** * When the progress dialog is canceled, stop the GET request. */ public void onCancel(DialogInterface dialog) { FileDownloader.this.cancel(true); } }; /** * Constructor. * @param appContext */ public FileDownloader(Context appContext) { _appContext = appContext; _progressDia = new ProgressDialog(_appContext, ProgressDialog.STYLE_HORIZONTAL); _progressDia.setMax(100); _progressDia.setTitle(_appContext.getString(R.string.diaHeader1)); _progressDia.setMessage(_appContext.getString(R.string.diaBody1)); _progressDia.setCancelable(true); _progressDia.setIndeterminate(false); _progressDia.setOnCancelListener(_progDiaCancelListener); } // Runs on the UI thread @Override protected void onPreExecute() { _progressDia.setProgress(0); _progressDia.show(); } @Override protected Void doInBackground(String... args) { String dloadURL = args[0], saveLoc = args[1]; ... ... while((len = input.read(buf)) > 0) { output.write(buf, 0, len); total += len; publishProgress((int)total * 100/lenghtOfFile); } ... ... } catch(SocketTimeoutException ex) { } finally { ... } // This is executed on main UI thread. @Override protected void onProgressUpdate(Integer... values) { _progressDia.setProgress(values[0]); } @Override protected void onCancelled() { ... } // This is executed on main UI thread. @Override protected void onPostExecute(Void result) { removeProgressDialog(); ... } /** * Remove the message dialog, if still showing. */ private void removeProgressDialog() { if(_progressDia != null && _progressDia.isShowing()) _progressDia.dismiss(); } } 

Вероятно, вы забыли установить dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

См. Этот пример кода, который меня работает:

 ProgressDialog dialog; @Override protected void onPreExecute() { dialog = new ProgressDialog(this); dialog.setMessage("Matching progress"); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setMax(100); dialog.setCancelable(false); dialog.show(); } /* * (non-Javadoc) * @see android.os.AsyncTask#doInBackground(Params[]) */ @Override protected Void doInBackground(Void... params) { return null; } protected void onPostExecute(Void result) { dialog.hide(); dialog = null; } 

Похоже, что вы используете два конструктора arg для ProgressDialog, которые предлагает документация для контекста (первый аргумент) и идентификатора темы (второй аргумент).

http://developer.android.com/reference/android/app/ProgressDialog.html#ProgressDialog(android.content.Context , int)

Поэтому, пока вы ДУМАЕТЕ, вы устанавливаете ProgressStyle в STYLE_HORIZONTAL, вы этого не делаете, вы устанавливаете идентификатор темы на то, что, вероятно, не является допустимым идентификатором темы.

Я бы предложил использовать один конструктор arg, который принимает контекст, а затем делать то, что предлагает Pentium10, и вызывать _progressDia.setProgressStyle (ProgressStyle.STYLE_HORIZONTAL);

Вы также можете указать этот тег в файле xml

стиль = "@ андроид: стиль / Widget.ProgressBar.Horizontal"

Сделайте запись индикатора выполнения в вашем текущем намерении проекта Android-проекта в качестве индикатора выполнения

Также проверьте его после сохранения в файле R.java для идентификатора вашего индикатора выполнения

Намерение следует вызывать при каждом запуске загрузки

как

StartActivity (новый Intent (это, Progress.class));