Android - диалог прогресса не закрывается - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть класс ListActivity, и при щелчке любого элемента в списке отображается новое действие. Загрузка нового действия требует времени, поэтому я хотел бы, чтобы пользователи знали, что что-то происходит (в форме диалогового окна прогресса)

Итак, чтобы сделать это, я реализовал Runnable в своем классе следующим образом -

public class ProtocolListActivity extends ListActivity implements Runnable {
private ProgressDialog progDialog;
....
protected void onListItemClick(ListView l, View v, int position, long id) {
                    progDialog.show(this, "Showing Data..", "please wait", true, false);

    Thread thread = new Thread(this);
    thread.start();
}
....
public void run() {
     // some code to start new activity based on which item the user has clicked.
}

Первоначально, когда я нажимаю, и загружается новое действие, диалоговое окно прогресса работает хорошо, но когда я закрываю предыдущее действие (чтобы вернуться в этот список), диалоговое окно прогресса все еще работает. Я хочу, чтобы диалог прогресса отображался только в то время, когда начинается новое действие.

Может кто-нибудь подсказать мне, как это правильно сделать.

1 Ответ

4 голосов
/ 18 февраля 2011

Диалоги должны быть явно удалены программистом (или закрыты пользователем). Итак, это должно быть сделано так:

в действии A (вызывающее действие)

protected void onListItemClick(ListView l, View v, int position, long id) {
    progDialog.show(this, "Showing Data..", "please wait", true, false);

    Thread thread = new Thread(this){
        // Do heavy weight work

        // Activity prepared to fire

        progDialog.dismiss();
    };
    thread.start();
}

Хотя в большинстве случаев тяжелая работа должна быть связана с активностью вызываемого абонента. В случае, если тяжелая работа выполняется onCreate вызываемого абонента, она должна выглядеть так:

Деятельность B (Callee):

onCreate(){
    progDialog.show(this, "Showing Data..", "please wait", true, false);

    Thread thread = new Thread(this){
        // Do heavy weight work

        // UI ready

        progDialog.dismiss();
    };
    thread.start();
}

Во всяком случае, идея все та же.

...