Tengo un ListActivity
que inicia otro Activity
según la selección de la lista. Este segundo Activity
necesita cargar un poco de datos de Internet y, como tal, hay un retraso notable entre cuando el usuario hace clic en un elemento y cuando aparece el Activity
.Mostrar una barra de progreso cuando se carga una actividad
Esto es un problema porque actualmente no tengo manera de indicarle al usuario que se está procesando su clic (incluso bastaría con cambiar el color del elemento de la lista seleccionada, pero no puedo encontrar una buena manera de hacerlo ese). Idealmente, podría mostrar un ProgressDialog
indeterminado mientras se carga el segundo Activity
.
He intentado algunos enfoques diferentes para esto, pero nada parece funcionar como se desee.
He intentado lo siguiente:
- Recuperando los datos serializables (no todos, pero alguna parte) en un
AsyncTask
en el primerActivity
y haciéndola pasar como un extra a la segunda. Esto en realidad no funciona así como unProgressDialog
que creé enonPreExecute()
no mostrar inmediatamente (parece retrasa por la transformación efectuada endoInBackground()
por alguna razón.)
Este es el código para eso:
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();
}
en el método de la segunda actividad
onCreate()
(esto no funciona en absoluto):requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarVisibility(true);
Aquí es el método onCreate()
para el segundo enfoque:
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();
}
}
¿Qué enfoques diferentes ha probado? ¿Podría compartir sus intentos? – Cristian
Me sorprende que el primer enfoque no haya funcionado. Un 'ProgressDialog' que se muestra en' onPreExecute() 'no debe ser retenido por el código en' doInBackground() ', ¿tal vez hubo algún otro problema con su código? –
¿Posiblemente? Agregué el código correspondiente ... – Adam