2011-01-04 13 views
20

W mojej aplikacji robię jakieś intensywne prace w AsyncTask sugerowane przez Android samouczki i pokazując ProgressDialog w moim głównym mojej działalności:Aktualizacja postępu dialogowe aktywności od AsyncTask

dialog = ProgressDialog.show(MyActivity.this, "title", "text"); 
new MyTask().execute(request); 

gdzie potem w MyTask I post wynika z powrotem do aktywności:

class MyTask extends AsyncTask<Request, Void, Result> { 

    @Override protected Result doInBackground(Request... params) { 
     // do some intense work here and return result 
    } 

    @Override protected void onPostExecute(Result res) { 
     postResult(res); 
    } 
} 

i na wynik delegowania, w główny ukryć okno dialogowe:

protected void postResult(Result res) { 
    dialog.dismiss(); 
    // do something more here with result... 
} 

Tak więc wszystko działa dobrze, ale chciałbym jakoś zaktualizować okno postępu, aby pokazać użytkownikowi prawdziwy postęp zamiast zwykłego "proszę czekać ...". Czy mogę w jakiś sposób uzyskać dostęp do okna postępu od MyTask.doInBackground, gdzie wszystkie prace są wykonane?

Jak rozumiem, działa jako oddzielny wątek, więc nie mogę "porozmawiać" z główną działalnością i dlatego używam onPostExecute, aby przekazać wynik z powrotem do niego. Ale problem polega na tym, że onPostExecute jest wywoływana tylko wtedy, gdy cała praca jest już wykonana i chciałbym zaktualizować postęp w dialogu w trakcie robienia czegoś.

Wszelkie wskazówki, jak to zrobić?

Odpowiedz

40

AsyncTask ma metodę onProgressUpdate(Integer...), że można wywołać każdą iterację na przykład lub za każdym razem, gdy postęp jest wykonywany podczas doInBackground() przez wywołanie publishProgress().

Patrz docs więcej szczegółów

+0

Uh, jakoś brakowało, że udział w docs, dzięki! – Laimoncijus

Powiązane problemy