Ho un ListActivity
che avvia un altro Activity
in base alla selezione dell'elenco. Questo secondo Activity
deve caricare un bel po 'di dati da Internet e, in quanto tale, si verifica un ritardo notevole tra quando l'utente fa clic su un elemento e quando viene visualizzato il numero Activity
.Mostra una barra di avanzamento durante il caricamento di un'attività
Questo è un problema perché attualmente non ho modo di indicare all'utente che il suo clic è in fase di elaborazione (anche solo cambiando il colore della voce di elenco selezionata sarebbe sufficiente ma non riesco a trovare un buon modo di fare quella). Idealmente sarei in grado di visualizzare un numero indeterminato ProgressDialog
mentre il secondo Activity
si sta caricando.
Ho provato alcuni approcci diversi per questo, ma nulla sembra funzionare come desiderato.
ho provato la seguente:
- il recupero dei dati serializzabili (non tutti, ma una certa parte) in un
AsyncTask
nel primoActivity
e passando come un extra per il secondo. Questo non funzionava bene comeProgressDialog
che ho creato inonPreExecute()
non visualizzare immediatamente (sembra in ritardo di trattamento fatto indoInBackground()
per qualche motivo.)
ecco il codice per questo:
AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
Dialog progress;
@Override
protected void onPreExecute() {
progress = ProgressDialog.show(SearchActivity.this,
"Loading data", "Please wait...");
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
DatasetReader reader = new DatasetReader();
reader.setFundID(params[0]);
reader.addDatsets(FundProfile.datasets);
reader.populate();
return reader.toString();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progress.dismiss();
}
};
read.execute(selectedItem.getUniqueID());
try {
action = new Intent(SearchActivity.this, FundProfile.class);
action.putExtra("data", read.get());
} catch(Exception ex) {
ex.printStackTrace();
}
Nel metodo del secondo Activity
onCreate()
(questo non funziona affatto):requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarVisibility(true);
Ecco il metodo onCreate()
per il secondo approccio:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitleColor(Color.WHITE);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarVisibility(true);
try {
setContentView(R.layout.fund_profile);
// init some data
setProgressBarVisibility(false);
} catch(Exception ex) {
FundProfile.this.finish();
}
}
Quali approcci diversi hai provato? Potresti condividere i tuoi tentativi? – Cristian
Sono sorpreso che il primo approccio non abbia funzionato. Un 'ProgressDialog' mostrato in' onPreExecute() 'non dovrebbe essere trattenuto dal codice in' doInBackground() ', forse c'era qualche altro problema con il tuo codice? –
Forse? Ho aggiunto il codice pertinente .. – Adam