I have a ListActivity
which launches another Activity
based on the list selection. This second Activity
needs to load a fair bit of data from the internet and as such there is a noticeable delay between when the user clicks on an item and when the Activity
displays.
This is a problem because I currently have no way to indicate to the user that their click is being processed (even just changing the colour of the selected list item would be sufficient but I can't find a good way to do that). Ideally I'd be able to display an indeterminate ProgressDialog
while the second Activity
is loading.
I've tried a few different approaches for this but nothing seems to work as desired.
I've tried the following:
- Retrieving the serializable data (not all of it but some part) in an
AsyncTask
in the firstActivity
and passing it as an extra to the second. This didn't really work well as aProgressDialog
I created inonPreExecute()
didn't display immediately (it seems delayed by the processing done indoInBackground()
for some reason.)
Here is the code for that:
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();
}
In the second Activity's
onCreate()
method (this does not work at all):requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarVisibility(true);
Here is the onCreate()
method for the second approach:
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();
}
}
ProgressDialog
shown inonPreExecute()
should not be held up by the code indoInBackground()
, perhaps there was some other issue with your code? – Punchboard