Android - диалоговое окно прогресса не закрывается

У меня есть класс 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.
}

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

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


person Mukul Jain    schedule 18.02.2011    source источник


Ответы (1)


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

в действии 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 (вызываемый абонент):

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();
}

В любом случае, идея остается прежней.

person xandy    schedule 18.02.2011