Intereting Posts
Java.Lang.RuntimeException, setParameters не удалось выполнить в версии для Android (4.1.1) ADB используется для беспроводного подключения, теперь я не могу подключиться и получить ошибку с двумя портами (не удалось подключиться *. *. *. *: 5555: 5555) Обработка заголовка ActionBar с помощью стека фрагментов? Установите RelativeLayout для заполнения неиспользуемого пространства Как сделать его единственным пейзажем для планшетов и только портрет для телефонов? Как настроить пользовательский просмотр обновления в SwipeRefreshLayout? Разработанный комплексный дизайн компоновки Android Событие ListView onClick не запускается с помощью связанного адреса электронной почты Пользовательские вкладки Chrome не открывают другие приложения Proguard нарушает аудиофайл в активах или raw Дженкинс не смог запустить эмулятор Доступ к TextView Groupview из getChildView () в ExpandableListView Добавление значка к вкладке в android Специальные символы заменяются квадратом в приложении для Android Почему требуется категория HOME?

Избегайте блокировки экрана, пока отображается индикатор ProgressDialog

Я хочу показать progressBar, в то время как некоторые инструкции выполняются в фоновом режиме, но я не хочу блокировать экран. Этот код блокирует экран:

private class ConvertDataInBackground extends AsyncTask<Params, Void, Boolean> { private MyProgressDialog mProgressDialog; @Override public void onPreExecute() { if(mProgressDialog == null) mProgressDialog = MyProgressDialog.show(mActivity, null, null); } @Override protected Boolean doInBackground(Params...params) { boolean conversionResult = executeConversion(params[0].item1, params[0].item2, params[0].item3); return conversionResult; } @Override protected void onPostExecute(Boolean result) { try { if(mProgressDialog.isShowing()) mProgressDialog.dismiss(); if(result) { Toast toast = Toast.makeText(mActivity, R.string.conversion_result, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } } catch (Exception e) { e.printStackTrace(); } } } 

Выполнение команды в фоновом режиме может занять некоторое время, и я хочу, чтобы пользователь мог работать с интерфейсом. Знаете ли вы, что мы можем работать с интерфейсом, а progressDialog отображается вверху?

Диалоги в Android обычно являются модальными. Вы можете попробовать создать диалог, а затем добавить FLAG_NOT_TOUCH_MODAL к его параметрам окна, но я не уверен, что он сработает. Идея этого будет примерно такой:

 ProgressDialog dialog = new ProgressDialog(this); dialog.setMessage(...); dialog.setTitle(...); dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

Обратите внимание, что может быть проще просто добавить ProgressBar в макет своей активности и показать его при необходимости, а не создавать диалог – это, по сути, то, что рекомендует документация Google. В руководстве разработчика Android по диалогам это можно сказать:

Избегайте ProgressDialog

Android включает еще один диалоговый класс под названием ProgressDialog который показывает диалог с индикатором выполнения. Однако, если вам нужно указать загрузку или неопределенный прогресс, вместо этого вы должны следовать руководящим принципам проектирования для Progress & Activity и использовать ProgressBar в своем макете.

Я думаю, что в вашей деятельности вы должны указать флаг FLAG_KEEP_SCREEN_ON:

  getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

Для меня это сработало.