Как отобразить ProgressDialog при подготовке к показу другой активности? - PullRequest
1 голос
/ 03 июля 2011

Мне нужно показать активность с MapView, если пользователь долго нажимал на элемент списка. Этот процесс занимает некоторое время, поэтому я хотел бы показать пользователю progressdialog, пока приложение зависает. Вот код:

ListView listView = (ListView) findViewById(android.R.id.list);
listView.setOnItemLongClickListener (new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
...
  ProgressDialog dialog = ProgressDialog.show(getApplicationContext(), "", "Loading. Please wait...", true);
  Intent intent = new Intent(getBaseContext(), Map.class);
  startActivity(intent);

Я выбрал правильный подход? Получение разных FC сейчас (в зависимости от контекста, выбранного для ProgressDialog). Можно ли отобразить ProgressBar в моем сценарии?

Upd . Я пытался показать тост перед началом деятельности. Опять же, тост отображается только тогда, когда карта уже отображается. Не понимаю, что происходит. Если я удаляю код startActivity, то сразу отображается тост.

1 Ответ

1 голос
/ 03 июля 2011

Вы делаете самую длинную подготовку в onCreate () MapView?Вы не должны этого делать, потому что он заблокирует поток пользовательского интерфейса ....

Вместо того, что вы должны делать - внутри onCreate () действия Map вы должны создать новый AsyncTask (в идеале) и показать там индикатор выполненияи выйдите из onCreate () сразу после отображения индикатора выполнения).Затем в AsyncTask после его завершения (в postExecuted ()) вы должны закрыть диалог прогресса и показать свою карту.PostExecuted () запускается в потоке пользовательского интерфейса, поэтому вы можете спокойно отклонять индикатор выполнения.

FC, которые у вас есть, и, возможно, ANR (не отвечает), вероятно, приходят, потому что вы делаете определенные вещи в / из потока пользовательского интерфейса.Вы ДОЛЖНЫ создавать / удалять ваши компоненты пользовательского интерфейса в потоке пользовательского интерфейса, и вы НЕ ДОЛЖНЫ выполнять длинную операцию в потоке пользовательского интерфейса.Это эмпирическое правило.

...