Я пытаюсь создать 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
.
Любая подсказка ценится,
вы должны вызвать 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();
}
};
}