Я пытаюсь создать 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
.
Любой намек приветствуется,
Вам нужно вызвать 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(); } }; }
Я даю вам решение для этого, попробуйте это … Сначала определите Диалог прогресса в методе Activity before onCreate ().
Частный прогресс ProgressDialogDialog;
Теперь в методе oncreate у вас может быть кнопка «Любая кнопка», на которой u изменит действие на любое действие. Просто установите индикатор прогресса.
progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");
Теперь используйте Thread to Hamndle Progressbar для отображения и скрытия
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();
Это все!
Диалоговое окно «Прогресс» не отображается, потому что вы должны использовать выделенный поток. Лучшие рекомендации в Android – использовать AsyncTask (настоятельно рекомендуется). См. Также этот ответ .
Это также возможно с помощью AsyncTask . Этот класс создает поток для вас. Вы должны подклассифицировать его и заполнить метод doInBackground(...)
.