Уважаемые Android-хакеры, Я пытаюсь сделать следующее в своем приложении для Android: когда пользователь нажимает на элемент списка в ListActivity, должен появиться индикатор ProgressDialog, необходимо предусмотреть предварительную загрузку и после сделано, другое действие должно быть вызвано с использованием намерения.Android: проблемы с ProgressDialog
Я пробовал разные подходы. Что совсем не сработало, это использование Async Task. По-видимому, я не могу показать, отклонить или изменить мой ProgressDialog из задачи Async, если этот класс не является членом моей первоначальной деятельности.
я перешел на простую тему тогда, это, как я пытаюсь сделать это:
dialog = ProgressDialog.show(BookmarkActivity.this, "", "Loading...",true);
new Thread() {
public void run() {
// do something
dialog.setMessage("Change Message...");
// do more
dialog.dismiss();
// ...
Intent intent = new Intent(BookmarkActivity.this, ThreadActivity.class);
BookmarkActivity.this.startActivity(intent);
}
}.start();
Это работает почти, но изменение диалогового сообщения нет. Я получаю ошибки, говорящие о «просочившихся окнах». (Я могу опубликовать полный журнал, если это необходимо).
Мои вопросы:
- Как я могу использовать Async Task для этого, где класс имеет свой собственный файл?
- Как я могу изменить ProgressDialog из моего потока или AsyncTask, не вызывая ошибки при изменении пользовательского интерфейса в другом потоке?
Заранее спасибо, Ян Оливер
Хорошо, с помощью Джейсона, я собрал эту Async задачу. Это работает!
public class ThreadPreLoader extends AsyncTask<Object, String, Void> {
private Activity mActivity;
private ProgressDialog mDialog;
public ThreadPreLoader(Activity activity) {
mActivity = activity;
}
protected void onPreExecute() {
mDialog = new ProgressDialog(mActivity);
mDialog.setMessage("Loading...");
mDialog.show();
}
protected Void doInBackground(Object... args) {
publishProgress("Loading something else..");
return null;
}
protected void onProgressUpdate(String... msg) {
mDialog.setMessage(msg[0]);
}
protected void onPostExecute(Void result) {
mDialog.dismiss();
}
}
Еще раз спасибо, Джейсон.
Эй Джейсон, это звучит многообещающе.Я постараюсь реализовать это и дать отзыв позже! – janoliver
Я обновил свой первый пост с реализацией вашей идеи. Он не работает должным образом. Не могли бы вы взглянуть на код? – janoliver
работает сейчас, имел некоторые незначительные ошибки при реализации AsynTask. Еще раз спасибо. – janoliver