我有一个ListActivity
,它根据列表选择启动另一个Activity
。第二个Activity
需要从互联网加载大量数据,因此在用户单击项目和Activity
显示之间存在明显的延迟。
这是一个问题,因为目前我没有办法告诉用户他们的点击正在被处理(即使只改变所选列表项的颜色也足够了,但我找不到一个好的方法来实现)。理想情况下,在第二个Activity
加载时,我希望能够显示一个未确定的ProgressDialog
。
我尝试了几种不同的方法,但没有一种像期望的那样工作。
我尝试了以下方法:
- 在第一个
Activity
的AsyncTask
中检索可序列化数据(不是全部,而是部分),并将其作为额外参数传递给第二个Activity
。这并没有很好地解决问题,因为在onPreExecute()
中创建的ProgressDialog
没有立即显示(由于某种原因,它似乎被doInBackground()
中执行的处理所延迟)。
这是那段代码:
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();
}
在第二个Activity的
onCreate()
方法中(这样根本不起作用):requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarVisibility(true);
以下是第二种方法的onCreate()
方法:
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();
}
}
onPreExecute()
中显示的ProgressDialog
不应该被doInBackground()
中的代码所阻塞,也许你的代码还有其他问题? - dave.c