Ho un'attività Android che acquisisce un feed RSS da un URL e utilizza il parser SAX per attaccare ogni elemento dall'XML in un array. Funziona tutto bene ma, come previsto, richiede un po 'di tempo, quindi voglio usare AsyncActivity per farlo in background. Il mio codice è il seguente:Attività ASync Android ProgressDialog non viene visualizzato fino al termine del thread di sfondo
class AddTask extends AsyncTask<Void, Item, Void> {
protected void onPreExecute() {
pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true);
}
protected Void doInBackground(Void... unused) {
items = parser.getItems();
for (Item it : items) {
publishProgress(it);
}
return(null);
}
protected void onProgressUpdate(Item... item) {
adapter.add(item[0]);
}
protected void onPostExecute(Void unused) {
pDialog.dismiss();
}
}
che io chiamo in onCreate()
con
new AddTask().execute();
La linea items = parser.getItems()
funziona bene - items
essere l'arraylist contenente ogni elemento dal XML. Il problema che sto affrontando è che all'avvio dell'attività, la ProgressDialog che creo in onPreExecute()
non viene visualizzata fino al dopo il il metodo doInBackground()
è terminato. io ottengo uno schermo nero, una lunga pausa, poi una lista completamente popolata con gli elementi in. Perché sta succedendo? Perché il disegno dell'interfaccia utente non viene visualizzato, la ProgressDialog mostra, il parser ottiene gli elementi e li aggiunge in modo incrementale alla lista, quindi il ProgressDialog si chiude?
Nella parte "il parser che ottiene gli elementi e aggiungendoli in modo incrementale all'elenco", il passo lento sarà nell'analisi e non si aggiungerà nulla all'elenco in quel punto. Quindi, tutti i tuoi articoli verranno inseriti nella lista abbastanza velocemente, quindi non aspettarti qui un effetto "incrementale". – CommonsWare
Questo non è un problema, non mi interessa quanto siano "incrementali" gli inserimenti, voglio solo che ProgressDialog si mostri mentre il lavoro in background è fatto e scompare una volta finito. – jackbot