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
.
Любой намек оценивается,
Ответы
Ответ 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(...)
.