Подтвердить что ты не робот

Android: ProgressDialog не показывает

Я пытаюсь создать ProgressDialog для Android-приложения (просто простой показ пользователю, что это происходит, никаких кнопок или чего-то еще), но я не могу понять это правильно. Я прошел через форумы и учебные пособия, а также пример кода, который поставляется с SDK, но безрезультатно.

Вот что я получил:

    btnSubmit.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        (...)
          ProgressDialog pd = new ProgressDialog(MyApp.this);
          pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
          pd.setMessage("Working...");
          pd.setIndeterminate(true);
          pd.setCancelable(false);

          // now fetch the results
          (...long time calculations here...)

          // remove progress dialog
          pd.dismiss();

Я также попробовал добавить pd.show(); и перепутал с параметром в new ProgressDialog, в результате чего ничего не произошло (кроме ошибок, которые выбранный параметр не будет работать), что означает: ProgressDialog никогда не появится, Приложение просто работает, как будто я никогда не добавлял диалог.

Я не знаю, создаю ли я диалог в нужном месте, я немного переместил его, но это тоже не помогло. Может, я не в том контексте? Вышеприведенный код находится внутри private ViewGroup _createInputForm() в MyApp.

Любой намек оценивается,

4b9b3361

Ответ 1

вам нужно вызвать pd.show, прежде чем начнется длинный расчет, а затем вычисление должно выполняться в отдельном потоке. Как только этот поток будет завершен, вы должны вызвать pd.dismiss(), чтобы закрыть диалог prgoress.

здесь вы можете увидеть пример:

progressdialog создается и отображается и вызывается поток для выполнения тяжелого вычисления:

@Override
    public void onClick(View v) {
       pd = ProgressDialog.show(lexs, "Search", "Searching...", true, false);
       Search search = new Search(   ...   );
       SearchThread searchThread = new SearchThread(search);
       searchThread.start();
    }

и здесь поток:

private class SearchThread extends Thread {

        private Search search;

        public SearchThread(Search search) {
            this.search = search;
        }

        @Override
        public void run() {         
            search.search();
            handler.sendEmptyMessage(0);
        }

        private Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                displaySearchResults(search);
                pd.dismiss();
            }
        };
    }

Ответ 2

Я даю вам решение, Попробуй это.... Сначала определите Диалог Прогресса в методе Activity before onCreate().

частный прогресс ProgressDialogDialog;

Теперь в методе oncreate у вас может быть кнопка "Любая кнопка", на которой u изменит действие на любое действие. Просто установите индикатор выполнения.

progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");

Теперь используйте "Поток", чтобы "Пропустить", "Прогресс", чтобы отобразить и скрыть

new Thread() 
{
  public void run() 
  {

     try
       {
        sleep(1500);

  // do the background process or any work that takes time to see progreaa dialog

      }
    catch (Exception e)
    {
        Log.e("tag",e.getMessage());
    }
// dismiss the progressdialog   
  progressDialog.dismiss();
 }
}.start();

Вот и все!

Ответ 3

Диалог выполнения не отображается, потому что вы должны использовать выделенный поток. Лучшие рекомендации в Android - использовать AsyncTask (настоятельно рекомендуется). См. Также этот ответ.

Ответ 4

Это также возможно, используя AsyncTask. Этот класс создает поток для вас. Вы должны подклассифицировать его и заполнить метод doInBackground(...).