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 никогда не будет обнаруживаться. Приложение просто продолжает бежать, как будто я никогда не добавлял диалоговое окно.

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

Любая подсказка ценится,

38
задан Brian Tompsett - 汤莱恩 6 June 2015 в 14:50
поделиться

1 ответ

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

вот пример:

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

@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();
            }
        };
    }
42
ответ дан 27 November 2019 в 03:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: